agentworkshop 0.6.1 → 0.7.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 (537) hide show
  1. package/.AgentWorkShop/prompts/host-tools.json +17 -0
  2. package/.env.example +37 -0
  3. package/.output/.AgentWorkShop/prompts/host-tools.json +17 -0
  4. package/.output/nitro.json +1 -1
  5. package/.output/public/_nuxt/{Bc_mM2cU.js → BH0Z05CS.js} +1 -1
  6. package/.output/public/_nuxt/Bxgaym6j.js +1 -0
  7. package/.output/public/_nuxt/{DRlJ2-4p.js → By-LNp3k.js} +1 -1
  8. package/.output/public/_nuxt/{C2QSTAWf.js → Bz40vyZS.js} +1 -1
  9. package/.output/public/_nuxt/{CwS_UHeH.js → CS8R0_J3.js} +1 -1
  10. package/.output/public/_nuxt/{ClptO7LA.js → CUxV8Bw_.js} +1 -1
  11. package/.output/public/_nuxt/CXmkVXS5.js +1 -0
  12. package/.output/public/_nuxt/DC-QMEk1.js +2 -0
  13. package/.output/public/_nuxt/{C-Y5ydB6.js → Dgp2wK2U.js} +6 -6
  14. package/.output/public/_nuxt/{Ck6tznoQ.js → DjqcbFBE.js} +1 -1
  15. package/.output/public/_nuxt/{B0haAGoq.js → GP2wXyuY.js} +1 -1
  16. package/.output/public/_nuxt/TownView.Bt33bo1M.css +1 -0
  17. package/.output/public/_nuxt/{MhK4buEJ.js → XVB9_zwP.js} +1 -1
  18. package/.output/public/_nuxt/_id_.BeqSLvl_.css +1 -0
  19. package/.output/public/_nuxt/builds/latest.json +1 -1
  20. package/.output/public/_nuxt/builds/meta/0f65fbec-c4c0-45de-9c50-bb41ada375e5.json +1 -0
  21. package/.output/public/_nuxt/{Bq_KKxCg.js → i_MKObHo.js} +1 -1
  22. package/.output/public/_nuxt/settings.DeRNNUcP.css +1 -0
  23. package/.output/public/_nuxt/{CclO6GyL.js → tpDMVY5w.js} +1 -1
  24. package/.output/public/_nuxt/{C0FogB-p.js → zwdqvGN_.js} +1 -1
  25. package/.output/server/chunks/_/nitro.mjs +2674 -2347
  26. package/.output/server/chunks/_/nitro.mjs.map +1 -1
  27. package/.output/server/chunks/build/{TownView-D9yCQe1T.mjs → TownView-BkHxMiwZ.mjs} +168 -159
  28. package/.output/server/chunks/build/{TownView-D9yCQe1T.mjs.map → TownView-BkHxMiwZ.mjs.map} +1 -1
  29. package/.output/server/chunks/build/{_id_-xR3AChMO.mjs → _id_-Bna1_JuB.mjs} +5 -4
  30. package/.output/server/chunks/build/_id_-Bna1_JuB.mjs.map +1 -0
  31. package/.output/server/chunks/build/{_id_-CmKAEFHV.mjs → _id_-GnRJPykX.mjs} +161 -119
  32. package/.output/server/chunks/build/_id_-GnRJPykX.mjs.map +1 -0
  33. package/.output/server/chunks/build/{_wsId_-C45nVrl-.mjs → _wsId_-CzLDGT_V.mjs} +6 -5
  34. package/.output/server/chunks/build/{_wsId_-C45nVrl-.mjs.map → _wsId_-CzLDGT_V.mjs.map} +1 -1
  35. package/.output/server/chunks/build/agents-D4l1icvn.mjs +1 -0
  36. package/.output/server/chunks/build/agents-D4l1icvn.mjs.map +1 -1
  37. package/.output/server/chunks/build/channel-templates-DqjtC-R0.mjs +1 -0
  38. package/.output/server/chunks/build/channel-templates-DqjtC-R0.mjs.map +1 -1
  39. package/.output/server/chunks/build/{daq-Boz_dlAQ.mjs → daq-D_W59QOe.mjs} +6 -5
  40. package/.output/server/chunks/build/daq-D_W59QOe.mjs.map +1 -0
  41. package/.output/server/chunks/build/{dcw-wTRwBAUi.mjs → dcw-BTM5YU-B.mjs} +3 -2
  42. package/.output/server/chunks/build/dcw-BTM5YU-B.mjs.map +1 -0
  43. package/.output/server/chunks/build/default-Dt6xLdpd.mjs +1 -0
  44. package/.output/server/chunks/build/{logs-Cdi-eXlN.mjs → logs-CUQt1z7D.mjs} +4 -3
  45. package/.output/server/chunks/build/logs-CUQt1z7D.mjs.map +1 -0
  46. package/.output/server/chunks/build/monitor-yNoV98rf.mjs +1 -0
  47. package/.output/server/chunks/build/{pages-bWKy0ZsA.mjs → pages-DR2bzczM.mjs} +4 -3
  48. package/.output/server/chunks/build/pages-DR2bzczM.mjs.map +1 -0
  49. package/.output/server/chunks/build/plugins-B-ZNey0Z.mjs +1 -0
  50. package/.output/server/chunks/build/plugins-B-ZNey0Z.mjs.map +1 -1
  51. package/.output/server/chunks/build/{settings-C3T5hR2A.mjs → settings-Cr06lbRy.mjs} +26 -18
  52. package/.output/server/chunks/build/settings-Cr06lbRy.mjs.map +1 -0
  53. package/.output/server/chunks/build/teams-QR3BBF7A.mjs +1 -0
  54. package/.output/server/chunks/build/teams-QR3BBF7A.mjs.map +1 -1
  55. package/.output/server/chunks/build/tokens-DFvr_TLj.mjs +1 -0
  56. package/.output/server/chunks/build/tokens-DFvr_TLj.mjs.map +1 -1
  57. package/.output/server/chunks/build/{town-CKg6Qxba.mjs → town-BN4vQPb8.mjs} +6 -5
  58. package/.output/server/chunks/build/town-BN4vQPb8.mjs.map +1 -0
  59. package/.output/server/chunks/build/town-BUqRobze.mjs +1 -0
  60. package/.output/server/chunks/build/town-BUqRobze.mjs.map +1 -1
  61. package/.output/server/chunks/build/{useDaqStream-zHEptJQ_.mjs → useDaqStream-hwkhJHFU.mjs} +2 -2
  62. package/.output/server/chunks/build/{useDaqStream-zHEptJQ_.mjs.map → useDaqStream-hwkhJHFU.mjs.map} +1 -1
  63. package/.output/server/chunks/build/{useDcwStream-BkWDGaWp.mjs → useDcwStream-Bdew_yrr.mjs} +16 -1
  64. package/.output/server/chunks/build/useDcwStream-Bdew_yrr.mjs.map +1 -0
  65. package/.output/server/chunks/build/{useDeviceTwins-NhtXqSkU.mjs → useDeviceTwins-C6EBg9oN.mjs} +2 -2
  66. package/.output/server/chunks/build/{useDeviceTwins-NhtXqSkU.mjs.map → useDeviceTwins-C6EBg9oN.mjs.map} +1 -1
  67. package/.output/server/chunks/build/{useOpsLog-CU64VDg5.mjs → useOpsLog-DdCqKVVG.mjs} +2 -2
  68. package/.output/server/chunks/build/{useOpsLog-CU64VDg5.mjs.map → useOpsLog-DdCqKVVG.mjs.map} +1 -1
  69. package/.output/server/chunks/build/users-4FZ0yFUO.mjs +1 -0
  70. package/.output/server/chunks/build/users-4FZ0yFUO.mjs.map +1 -1
  71. package/.output/server/chunks/build/workshop-CLhwe5eo.mjs +1 -0
  72. package/.output/server/chunks/build/workshop-CLhwe5eo.mjs.map +1 -1
  73. package/.output/server/chunks/routes/api/health.get.mjs +1 -0
  74. package/.output/server/chunks/routes/api/health.get.mjs.map +1 -1
  75. package/.output/server/chunks/routes/api/index.get.mjs +1 -0
  76. package/.output/server/chunks/routes/api/index.get.mjs.map +1 -1
  77. package/.output/server/chunks/routes/api/index.post.mjs +1 -0
  78. package/.output/server/chunks/routes/api/index.post.mjs.map +1 -1
  79. package/.output/server/chunks/routes/api/mcp/workshop.mjs +1 -0
  80. package/.output/server/chunks/routes/api/mcp/workshop.mjs.map +1 -1
  81. package/.output/server/chunks/routes/api/metrics.mjs +1 -0
  82. package/.output/server/chunks/routes/api/metrics.mjs.map +1 -1
  83. package/.output/server/chunks/routes/api/plugins/_name/_...path_.mjs +1 -0
  84. package/.output/server/chunks/routes/api/plugins/_name/_...path_.mjs.map +1 -1
  85. package/.output/server/chunks/routes/api/plugins/client/_name_.get.mjs +1 -0
  86. package/.output/server/chunks/routes/api/plugins/client/_name_.get.mjs.map +1 -1
  87. package/.output/server/chunks/routes/api/plugins/manifest.get.mjs +1 -0
  88. package/.output/server/chunks/routes/api/plugins/manifest.get.mjs.map +1 -1
  89. package/.output/server/chunks/routes/api/system/config.get.mjs +1 -0
  90. package/.output/server/chunks/routes/api/system/config.get.mjs.map +1 -1
  91. package/.output/server/chunks/routes/api/system/index.get.mjs +1 -0
  92. package/.output/server/chunks/routes/api/system/index.get.mjs.map +1 -1
  93. package/.output/server/chunks/routes/api/system/index.patch.mjs +1 -0
  94. package/.output/server/chunks/routes/api/system/index.patch.mjs.map +1 -1
  95. package/.output/server/chunks/routes/api/system/monitor/terminal/ws.mjs +1 -0
  96. package/.output/server/chunks/routes/api/system/monitor/terminal/ws.mjs.map +1 -1
  97. package/.output/server/chunks/routes/api/system/monitor/terminate.post.mjs +1 -0
  98. package/.output/server/chunks/routes/api/system/monitor/terminate.post.mjs.map +1 -1
  99. package/.output/server/chunks/routes/api/system/monitor.get.mjs +1 -0
  100. package/.output/server/chunks/routes/api/system/monitor.get.mjs.map +1 -1
  101. package/.output/server/chunks/routes/api/system/settings/events.get.mjs +1 -0
  102. package/.output/server/chunks/routes/api/system/settings/events.get.mjs.map +1 -1
  103. package/.output/server/chunks/routes/api/system/settings/reset.post.mjs +1 -0
  104. package/.output/server/chunks/routes/api/system/settings/reset.post.mjs.map +1 -1
  105. package/.output/server/chunks/routes/api/users/_id_.delete.mjs +1 -0
  106. package/.output/server/chunks/routes/api/users/_id_.delete.mjs.map +1 -1
  107. package/.output/server/chunks/routes/api/users/_id_.get.mjs +1 -0
  108. package/.output/server/chunks/routes/api/users/_id_.get.mjs.map +1 -1
  109. package/.output/server/chunks/routes/api/users/_id_.put.mjs +1 -0
  110. package/.output/server/chunks/routes/api/users/_id_.put.mjs.map +1 -1
  111. package/.output/server/chunks/routes/api/users/index.get.mjs +1 -0
  112. package/.output/server/chunks/routes/api/users/index.get.mjs.map +1 -1
  113. package/.output/server/chunks/routes/api/users/index.post.mjs +1 -0
  114. package/.output/server/chunks/routes/api/users/index.post.mjs.map +1 -1
  115. package/.output/server/chunks/routes/api/users/login.post.mjs +1 -0
  116. package/.output/server/chunks/routes/api/users/login.post.mjs.map +1 -1
  117. package/.output/server/chunks/routes/api/users/logout.post.mjs +1 -0
  118. package/.output/server/chunks/routes/api/users/logout.post.mjs.map +1 -1
  119. package/.output/server/chunks/routes/api/users/me.get.mjs +1 -0
  120. package/.output/server/chunks/routes/api/users/me.get.mjs.map +1 -1
  121. package/.output/server/chunks/routes/api/users/register.post.mjs +1 -0
  122. package/.output/server/chunks/routes/api/users/register.post.mjs.map +1 -1
  123. package/.output/server/chunks/routes/api/users/tokens/_id/token.get.mjs +1 -0
  124. package/.output/server/chunks/routes/api/users/tokens/_id/token.get.mjs.map +1 -1
  125. package/.output/server/chunks/routes/api/users/tokens/_id_.delete.mjs +1 -0
  126. package/.output/server/chunks/routes/api/users/tokens/_id_.delete.mjs.map +1 -1
  127. package/.output/server/chunks/routes/api/users/tokens/_id_.patch.mjs +1 -0
  128. package/.output/server/chunks/routes/api/users/tokens/_id_.patch.mjs.map +1 -1
  129. package/.output/server/chunks/routes/api/workshop/_...path_.mjs +1 -0
  130. package/.output/server/chunks/routes/api/workshop/_...path_.mjs.map +1 -1
  131. package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.get.mjs +1 -0
  132. package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.get.mjs.map +1 -1
  133. package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.post.mjs +1 -0
  134. package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.post.mjs.map +1 -1
  135. package/.output/server/chunks/routes/api/workshop/a2a/send.post.mjs +1 -0
  136. package/.output/server/chunks/routes/api/workshop/a2a/send.post.mjs.map +1 -1
  137. package/.output/server/chunks/routes/api/workshop/agent-tools/approvals/_id/decide.post.mjs +1 -0
  138. package/.output/server/chunks/routes/api/workshop/agent-tools/approvals/_id/decide.post.mjs.map +1 -1
  139. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.delete.mjs +1 -0
  140. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.delete.mjs.map +1 -1
  141. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.patch.mjs +1 -0
  142. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.patch.mjs.map +1 -1
  143. package/.output/server/chunks/routes/api/workshop/agent-tools/index.get.mjs +1 -0
  144. package/.output/server/chunks/routes/api/workshop/agent-tools/index.get.mjs.map +1 -1
  145. package/.output/server/chunks/routes/api/workshop/agent-tools/index.post.mjs +1 -0
  146. package/.output/server/chunks/routes/api/workshop/agent-tools/index.post.mjs.map +1 -1
  147. package/.output/server/chunks/routes/api/workshop/agent-tools/index2.get.mjs +1 -0
  148. package/.output/server/chunks/routes/api/workshop/agent-tools/index2.get.mjs.map +1 -1
  149. package/.output/server/chunks/routes/api/workshop/agent-tools/invoke.post.mjs +1 -0
  150. package/.output/server/chunks/routes/api/workshop/agent-tools/invoke.post.mjs.map +1 -1
  151. package/.output/server/chunks/routes/api/workshop/agents/_id_.delete.mjs +1 -0
  152. package/.output/server/chunks/routes/api/workshop/agents/_id_.delete.mjs.map +1 -1
  153. package/.output/server/chunks/routes/api/workshop/agents/_id_.get.mjs +1 -0
  154. package/.output/server/chunks/routes/api/workshop/agents/_id_.get.mjs.map +1 -1
  155. package/.output/server/chunks/routes/api/workshop/agents/_id_.patch.mjs +1 -0
  156. package/.output/server/chunks/routes/api/workshop/agents/_id_.patch.mjs.map +1 -1
  157. package/.output/server/chunks/routes/api/workshop/agents/subscribe.post.mjs +1 -0
  158. package/.output/server/chunks/routes/api/workshop/agents/subscribe.post.mjs.map +1 -1
  159. package/.output/server/chunks/routes/api/workshop/approvals/_id/decide.post.mjs +1 -0
  160. package/.output/server/chunks/routes/api/workshop/approvals/_id/decide.post.mjs.map +1 -1
  161. package/.output/server/chunks/routes/api/workshop/assets/character/_id_.delete.mjs +1 -0
  162. package/.output/server/chunks/routes/api/workshop/assets/character/_id_.delete.mjs.map +1 -1
  163. package/.output/server/chunks/routes/api/workshop/assets/devices/_id_.delete.mjs +1 -0
  164. package/.output/server/chunks/routes/api/workshop/assets/devices/_id_.delete.mjs.map +1 -1
  165. package/.output/server/chunks/routes/api/workshop/assets/index.get.mjs +1 -0
  166. package/.output/server/chunks/routes/api/workshop/assets/index.get.mjs.map +1 -1
  167. package/.output/server/chunks/routes/api/workshop/assets/index.post.mjs +1 -0
  168. package/.output/server/chunks/routes/api/workshop/assets/index.post.mjs.map +1 -1
  169. package/.output/server/chunks/routes/api/workshop/assets/index2.get.mjs +1 -0
  170. package/.output/server/chunks/routes/api/workshop/assets/index2.get.mjs.map +1 -1
  171. package/.output/server/chunks/routes/api/workshop/assets/index2.post.mjs +1 -0
  172. package/.output/server/chunks/routes/api/workshop/assets/index2.post.mjs.map +1 -1
  173. package/.output/server/chunks/routes/api/workshop/audit.get.mjs +1 -0
  174. package/.output/server/chunks/routes/api/workshop/audit.get.mjs.map +1 -1
  175. package/.output/server/chunks/routes/api/workshop/caller.mjs +1 -0
  176. package/.output/server/chunks/routes/api/workshop/caller.mjs.map +1 -1
  177. package/.output/server/chunks/routes/api/workshop/channel-templates/_id/instantiate.post.mjs +1 -0
  178. package/.output/server/chunks/routes/api/workshop/channel-templates/_id/instantiate.post.mjs.map +1 -1
  179. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.delete.mjs +1 -0
  180. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.delete.mjs.map +1 -1
  181. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.get.mjs +1 -0
  182. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.get.mjs.map +1 -1
  183. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.patch.mjs +1 -0
  184. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.patch.mjs.map +1 -1
  185. package/.output/server/chunks/routes/api/workshop/channel-templates/from-channel.post.mjs +1 -0
  186. package/.output/server/chunks/routes/api/workshop/channel-templates/from-channel.post.mjs.map +1 -1
  187. package/.output/server/chunks/routes/api/workshop/channels/_id/activate.post.mjs +1 -0
  188. package/.output/server/chunks/routes/api/workshop/channels/_id/activate.post.mjs.map +1 -1
  189. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.get.mjs +1 -0
  190. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.get.mjs.map +1 -1
  191. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.post.mjs +1 -0
  192. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.post.mjs.map +1 -1
  193. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/_memoryId_.delete.mjs +1 -0
  194. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/_memoryId_.delete.mjs.map +1 -1
  195. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/search.post.mjs +1 -0
  196. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/search.post.mjs.map +1 -1
  197. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/model.patch.mjs +1 -0
  198. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/model.patch.mjs.map +1 -1
  199. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/position.patch.mjs +1 -0
  200. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/position.patch.mjs.map +1 -1
  201. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/range.patch.mjs +1 -0
  202. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/range.patch.mjs.map +1 -1
  203. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/stop.post.mjs +1 -0
  204. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/stop.post.mjs.map +1 -1
  205. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.delete.mjs +1 -0
  206. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.delete.mjs.map +1 -1
  207. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.patch.mjs +1 -0
  208. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.patch.mjs.map +1 -1
  209. package/.output/server/chunks/routes/api/workshop/channels/_id/events.get.mjs +1 -0
  210. package/.output/server/chunks/routes/api/workshop/channels/_id/events.get.mjs.map +1 -1
  211. package/.output/server/chunks/routes/api/workshop/channels/_id/index.get.mjs +1 -0
  212. package/.output/server/chunks/routes/api/workshop/channels/_id/index.get.mjs.map +1 -1
  213. package/.output/server/chunks/routes/api/workshop/channels/_id/index.post.mjs +1 -0
  214. package/.output/server/chunks/routes/api/workshop/channels/_id/index.post.mjs.map +1 -1
  215. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.get.mjs +1 -0
  216. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.get.mjs.map +1 -1
  217. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.post.mjs +1 -0
  218. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.post.mjs.map +1 -1
  219. package/.output/server/chunks/routes/api/workshop/channels/_id/index3.get.mjs +1 -0
  220. package/.output/server/chunks/routes/api/workshop/channels/_id/index3.get.mjs.map +1 -1
  221. package/.output/server/chunks/routes/api/workshop/channels/_id/index3.post.mjs +1 -0
  222. package/.output/server/chunks/routes/api/workshop/channels/_id/index3.post.mjs.map +1 -1
  223. package/.output/server/chunks/routes/api/workshop/channels/_id/index4.get.mjs +1 -0
  224. package/.output/server/chunks/routes/api/workshop/channels/_id/index4.get.mjs.map +1 -1
  225. package/.output/server/chunks/routes/api/workshop/channels/_id/index4.post.mjs +1 -0
  226. package/.output/server/chunks/routes/api/workshop/channels/_id/index4.post.mjs.map +1 -1
  227. package/.output/server/chunks/routes/api/workshop/channels/_id/memories/_memoryId_.delete.mjs +1 -0
  228. package/.output/server/chunks/routes/api/workshop/channels/_id/memories/_memoryId_.delete.mjs.map +1 -1
  229. package/.output/server/chunks/routes/api/workshop/channels/_id/queue.get.mjs +1 -0
  230. package/.output/server/chunks/routes/api/workshop/channels/_id/queue.get.mjs.map +1 -1
  231. package/.output/server/chunks/routes/api/workshop/channels/_id/terminals.get.mjs +1 -0
  232. package/.output/server/chunks/routes/api/workshop/channels/_id/terminals.get.mjs.map +1 -1
  233. package/.output/server/chunks/routes/api/workshop/channels/_id_.delete.mjs +1 -0
  234. package/.output/server/chunks/routes/api/workshop/channels/_id_.delete.mjs.map +1 -1
  235. package/.output/server/chunks/routes/api/workshop/channels/index.get.mjs +1 -0
  236. package/.output/server/chunks/routes/api/workshop/channels/index.get.mjs.map +1 -1
  237. package/.output/server/chunks/routes/api/workshop/channels/index.patch.mjs +1 -0
  238. package/.output/server/chunks/routes/api/workshop/channels/index.patch.mjs.map +1 -1
  239. package/.output/server/chunks/routes/api/workshop/channels.get.mjs +1 -0
  240. package/.output/server/chunks/routes/api/workshop/channels.get.mjs.map +1 -1
  241. package/.output/server/chunks/routes/api/workshop/channels.post.mjs +1 -0
  242. package/.output/server/chunks/routes/api/workshop/channels.post.mjs.map +1 -1
  243. package/.output/server/chunks/routes/api/workshop/daq/_id/bind.post.mjs +1 -0
  244. package/.output/server/chunks/routes/api/workshop/daq/_id/bind.post.mjs.map +1 -1
  245. package/.output/server/chunks/routes/api/workshop/daq/_id/frames/content.get.mjs +1 -0
  246. package/.output/server/chunks/routes/api/workshop/daq/_id/frames/content.get.mjs.map +1 -1
  247. package/.output/server/chunks/routes/api/workshop/daq/_id/frames.get.mjs +1 -0
  248. package/.output/server/chunks/routes/api/workshop/daq/_id/frames.get.mjs.map +1 -1
  249. package/.output/server/chunks/routes/api/workshop/daq/_id/samples.get.mjs +1 -0
  250. package/.output/server/chunks/routes/api/workshop/daq/_id/samples.get.mjs.map +1 -1
  251. package/.output/server/chunks/routes/api/workshop/daq/_id/test.post.mjs +1 -0
  252. package/.output/server/chunks/routes/api/workshop/daq/_id/test.post.mjs.map +1 -1
  253. package/.output/server/chunks/routes/api/workshop/daq/_id_.delete.mjs +1 -0
  254. package/.output/server/chunks/routes/api/workshop/daq/_id_.delete.mjs.map +1 -1
  255. package/.output/server/chunks/routes/api/workshop/daq/_id_.patch.mjs +1 -0
  256. package/.output/server/chunks/routes/api/workshop/daq/_id_.patch.mjs.map +1 -1
  257. package/.output/server/chunks/routes/api/workshop/daq/alarms/_id/ack.post.mjs +1 -0
  258. package/.output/server/chunks/routes/api/workshop/daq/alarms/_id/ack.post.mjs.map +1 -1
  259. package/.output/server/chunks/routes/api/workshop/daq/alarms.get.mjs +1 -0
  260. package/.output/server/chunks/routes/api/workshop/daq/alarms.get.mjs.map +1 -1
  261. package/.output/server/chunks/routes/api/workshop/daq/controller.post.mjs +1 -0
  262. package/.output/server/chunks/routes/api/workshop/daq/controller.post.mjs.map +1 -1
  263. package/.output/server/chunks/routes/api/workshop/daq/index.post.mjs +1 -0
  264. package/.output/server/chunks/routes/api/workshop/daq/index.post.mjs.map +1 -1
  265. package/.output/server/chunks/routes/api/workshop/daq/infra/reconnect.post.mjs +1 -0
  266. package/.output/server/chunks/routes/api/workshop/daq/infra/reconnect.post.mjs.map +1 -1
  267. package/.output/server/chunks/routes/api/workshop/daq/infra.get.mjs +1 -0
  268. package/.output/server/chunks/routes/api/workshop/daq/infra.get.mjs.map +1 -1
  269. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.delete.mjs +1 -0
  270. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.delete.mjs.map +1 -1
  271. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.patch.mjs +1 -0
  272. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.patch.mjs.map +1 -1
  273. package/.output/server/chunks/routes/api/workshop/daq/test-driver.post.mjs +1 -0
  274. package/.output/server/chunks/routes/api/workshop/daq/test-driver.post.mjs.map +1 -1
  275. package/.output/server/chunks/routes/api/workshop/dcw/_id/bind.post.mjs +1 -0
  276. package/.output/server/chunks/routes/api/workshop/dcw/_id/bind.post.mjs.map +1 -1
  277. package/.output/server/chunks/routes/api/workshop/dcw/_id/param-ledger.get.mjs +1 -0
  278. package/.output/server/chunks/routes/api/workshop/dcw/_id/param-ledger.get.mjs.map +1 -1
  279. package/.output/server/chunks/routes/api/workshop/dcw/_id/read.post.mjs +31 -0
  280. package/.output/server/chunks/routes/api/workshop/dcw/_id/read.post.mjs.map +1 -0
  281. package/.output/server/chunks/routes/api/workshop/dcw/_id/test.post.mjs +1 -0
  282. package/.output/server/chunks/routes/api/workshop/dcw/_id/test.post.mjs.map +1 -1
  283. package/.output/server/chunks/routes/api/workshop/dcw/_id/write.post.mjs +1 -0
  284. package/.output/server/chunks/routes/api/workshop/dcw/_id/write.post.mjs.map +1 -1
  285. package/.output/server/chunks/routes/api/workshop/dcw/_id_.delete.mjs +1 -0
  286. package/.output/server/chunks/routes/api/workshop/dcw/_id_.delete.mjs.map +1 -1
  287. package/.output/server/chunks/routes/api/workshop/dcw/_id_.patch.mjs +1 -0
  288. package/.output/server/chunks/routes/api/workshop/dcw/_id_.patch.mjs.map +1 -1
  289. package/.output/server/chunks/routes/api/workshop/dcw/controller.post.mjs +1 -0
  290. package/.output/server/chunks/routes/api/workshop/dcw/controller.post.mjs.map +1 -1
  291. package/.output/server/chunks/routes/api/workshop/dcw/index.get.mjs +1 -0
  292. package/.output/server/chunks/routes/api/workshop/dcw/index.get.mjs.map +1 -1
  293. package/.output/server/chunks/routes/api/workshop/dcw/index.post.mjs +1 -0
  294. package/.output/server/chunks/routes/api/workshop/dcw/index.post.mjs.map +1 -1
  295. package/.output/server/chunks/routes/api/workshop/dcw/index2.get.mjs +1 -0
  296. package/.output/server/chunks/routes/api/workshop/dcw/index2.get.mjs.map +1 -1
  297. package/.output/server/chunks/routes/api/workshop/dcw/index2.post.mjs +1 -0
  298. package/.output/server/chunks/routes/api/workshop/dcw/index2.post.mjs.map +1 -1
  299. package/.output/server/chunks/routes/api/workshop/dcw/index3.get.mjs +1 -0
  300. package/.output/server/chunks/routes/api/workshop/dcw/index3.get.mjs.map +1 -1
  301. package/.output/server/chunks/routes/api/workshop/dcw/index3.post.mjs +1 -0
  302. package/.output/server/chunks/routes/api/workshop/dcw/index3.post.mjs.map +1 -1
  303. package/.output/server/chunks/routes/api/workshop/dcw/index4.get.mjs +1 -0
  304. package/.output/server/chunks/routes/api/workshop/dcw/index4.get.mjs.map +1 -1
  305. package/.output/server/chunks/routes/api/workshop/dcw/index4.post.mjs +1 -0
  306. package/.output/server/chunks/routes/api/workshop/dcw/index4.post.mjs.map +1 -1
  307. package/.output/server/chunks/routes/api/workshop/dcw/index5.get.mjs +1 -0
  308. package/.output/server/chunks/routes/api/workshop/dcw/index5.get.mjs.map +1 -1
  309. package/.output/server/chunks/routes/api/workshop/dcw/journal/node/_nodeId/rollback.post.mjs +1 -0
  310. package/.output/server/chunks/routes/api/workshop/dcw/journal/node/_nodeId/rollback.post.mjs.map +1 -1
  311. package/.output/server/chunks/routes/api/workshop/dcw/line/query.get.mjs +1 -0
  312. package/.output/server/chunks/routes/api/workshop/dcw/line/query.get.mjs.map +1 -1
  313. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/start.post.mjs +1 -0
  314. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/start.post.mjs.map +1 -1
  315. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/stop.post.mjs +1 -0
  316. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/stop.post.mjs.map +1 -1
  317. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.delete.mjs +1 -0
  318. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.delete.mjs.map +1 -1
  319. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.patch.mjs +1 -0
  320. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.patch.mjs.map +1 -1
  321. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/judge.post.mjs +1 -0
  322. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/judge.post.mjs.map +1 -1
  323. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/rollback.post.mjs +1 -0
  324. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/rollback.post.mjs.map +1 -1
  325. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/series.get.mjs +1 -0
  326. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/series.get.mjs.map +1 -1
  327. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id_.get.mjs +1 -0
  328. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id_.get.mjs.map +1 -1
  329. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.delete.mjs +1 -0
  330. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.delete.mjs.map +1 -1
  331. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.patch.mjs +1 -0
  332. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.patch.mjs.map +1 -1
  333. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/apply.post.mjs +1 -0
  334. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/apply.post.mjs.map +1 -1
  335. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/mark-good.post.mjs +1 -0
  336. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/mark-good.post.mjs.map +1 -1
  337. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/rollback-good.post.mjs +1 -0
  338. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/rollback-good.post.mjs.map +1 -1
  339. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.delete.mjs +1 -0
  340. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.delete.mjs.map +1 -1
  341. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.patch.mjs +1 -0
  342. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.patch.mjs.map +1 -1
  343. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/close.post.mjs +1 -0
  344. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/close.post.mjs.map +1 -1
  345. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/data.get.mjs +1 -0
  346. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/data.get.mjs.map +1 -1
  347. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/rollback.post.mjs +1 -0
  348. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/rollback.post.mjs.map +1 -1
  349. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.delete.mjs +1 -0
  350. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.delete.mjs.map +1 -1
  351. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.patch.mjs +1 -0
  352. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.patch.mjs.map +1 -1
  353. package/.output/server/chunks/routes/api/workshop/dcw/test-driver.post.mjs +1 -0
  354. package/.output/server/chunks/routes/api/workshop/dcw/test-driver.post.mjs.map +1 -1
  355. package/.output/server/chunks/routes/api/workshop/device-twins/_id/control.post.mjs +1 -0
  356. package/.output/server/chunks/routes/api/workshop/device-twins/_id/control.post.mjs.map +1 -1
  357. package/.output/server/chunks/routes/api/workshop/device-twins/_id/telemetry.post.mjs +1 -0
  358. package/.output/server/chunks/routes/api/workshop/device-twins/_id/telemetry.post.mjs.map +1 -1
  359. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.delete.mjs +1 -0
  360. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.delete.mjs.map +1 -1
  361. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.patch.mjs +1 -0
  362. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.patch.mjs.map +1 -1
  363. package/.output/server/chunks/routes/api/workshop/fs/dirs.get.mjs +1 -0
  364. package/.output/server/chunks/routes/api/workshop/fs/dirs.get.mjs.map +1 -1
  365. package/.output/server/chunks/routes/api/workshop/index.get.mjs +1 -0
  366. package/.output/server/chunks/routes/api/workshop/index.get.mjs.map +1 -1
  367. package/.output/server/chunks/routes/api/workshop/index.post.mjs +1 -0
  368. package/.output/server/chunks/routes/api/workshop/index.post.mjs.map +1 -1
  369. package/.output/server/chunks/routes/api/workshop/index10.get.mjs +1 -0
  370. package/.output/server/chunks/routes/api/workshop/index10.get.mjs.map +1 -1
  371. package/.output/server/chunks/routes/api/workshop/index2.get.mjs +1 -0
  372. package/.output/server/chunks/routes/api/workshop/index2.get.mjs.map +1 -1
  373. package/.output/server/chunks/routes/api/workshop/index2.post.mjs +1 -0
  374. package/.output/server/chunks/routes/api/workshop/index2.post.mjs.map +1 -1
  375. package/.output/server/chunks/routes/api/workshop/index3.get.mjs +1 -0
  376. package/.output/server/chunks/routes/api/workshop/index3.get.mjs.map +1 -1
  377. package/.output/server/chunks/routes/api/workshop/index3.post.mjs +1 -0
  378. package/.output/server/chunks/routes/api/workshop/index3.post.mjs.map +1 -1
  379. package/.output/server/chunks/routes/api/workshop/index4.get.mjs +1 -0
  380. package/.output/server/chunks/routes/api/workshop/index4.get.mjs.map +1 -1
  381. package/.output/server/chunks/routes/api/workshop/index4.post.mjs +1 -0
  382. package/.output/server/chunks/routes/api/workshop/index4.post.mjs.map +1 -1
  383. package/.output/server/chunks/routes/api/workshop/index5.get.mjs +1 -0
  384. package/.output/server/chunks/routes/api/workshop/index5.get.mjs.map +1 -1
  385. package/.output/server/chunks/routes/api/workshop/index5.post.mjs +1 -0
  386. package/.output/server/chunks/routes/api/workshop/index5.post.mjs.map +1 -1
  387. package/.output/server/chunks/routes/api/workshop/index6.get.mjs +1 -0
  388. package/.output/server/chunks/routes/api/workshop/index6.get.mjs.map +1 -1
  389. package/.output/server/chunks/routes/api/workshop/index6.post.mjs +1 -0
  390. package/.output/server/chunks/routes/api/workshop/index6.post.mjs.map +1 -1
  391. package/.output/server/chunks/routes/api/workshop/index7.get.mjs +1 -0
  392. package/.output/server/chunks/routes/api/workshop/index7.get.mjs.map +1 -1
  393. package/.output/server/chunks/routes/api/workshop/index7.post.mjs +1 -0
  394. package/.output/server/chunks/routes/api/workshop/index7.post.mjs.map +1 -1
  395. package/.output/server/chunks/routes/api/workshop/index8.get.mjs +1 -0
  396. package/.output/server/chunks/routes/api/workshop/index8.get.mjs.map +1 -1
  397. package/.output/server/chunks/routes/api/workshop/index8.post.mjs +1 -0
  398. package/.output/server/chunks/routes/api/workshop/index8.post.mjs.map +1 -1
  399. package/.output/server/chunks/routes/api/workshop/index9.get.mjs +1 -0
  400. package/.output/server/chunks/routes/api/workshop/index9.get.mjs.map +1 -1
  401. package/.output/server/chunks/routes/api/workshop/mailbox/all.get.mjs +1 -0
  402. package/.output/server/chunks/routes/api/workshop/mailbox/all.get.mjs.map +1 -1
  403. package/.output/server/chunks/routes/api/workshop/mailbox.get.mjs +1 -0
  404. package/.output/server/chunks/routes/api/workshop/mailbox.get.mjs.map +1 -1
  405. package/.output/server/chunks/routes/api/workshop/memories/maintenance.post.mjs +1 -0
  406. package/.output/server/chunks/routes/api/workshop/memories/maintenance.post.mjs.map +1 -1
  407. package/.output/server/chunks/routes/api/workshop/plugins/_name/disable.post.mjs +1 -0
  408. package/.output/server/chunks/routes/api/workshop/plugins/_name/disable.post.mjs.map +1 -1
  409. package/.output/server/chunks/routes/api/workshop/plugins/_name/enable.post.mjs +1 -0
  410. package/.output/server/chunks/routes/api/workshop/plugins/_name/enable.post.mjs.map +1 -1
  411. package/.output/server/chunks/routes/api/workshop/plugins/index.get.mjs +1 -0
  412. package/.output/server/chunks/routes/api/workshop/plugins/index.get.mjs.map +1 -1
  413. package/.output/server/chunks/routes/api/workshop/runtime.get.mjs +1 -0
  414. package/.output/server/chunks/routes/api/workshop/runtime.get.mjs.map +1 -1
  415. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.delete.mjs +1 -0
  416. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.delete.mjs.map +1 -1
  417. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.put.mjs +1 -0
  418. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.put.mjs.map +1 -1
  419. package/.output/server/chunks/routes/api/workshop/scene/layouts.get.mjs +1 -0
  420. package/.output/server/chunks/routes/api/workshop/scene/layouts.get.mjs.map +1 -1
  421. package/.output/server/chunks/routes/api/workshop/tasks/_id/complete.post.mjs +1 -0
  422. package/.output/server/chunks/routes/api/workshop/tasks/_id/complete.post.mjs.map +1 -1
  423. package/.output/server/chunks/routes/api/workshop/tasks/_id/dispatch.post.mjs +1 -0
  424. package/.output/server/chunks/routes/api/workshop/tasks/_id/dispatch.post.mjs.map +1 -1
  425. package/.output/server/chunks/routes/api/workshop/tasks/_id/index.post.mjs +1 -0
  426. package/.output/server/chunks/routes/api/workshop/tasks/_id/index.post.mjs.map +1 -1
  427. package/.output/server/chunks/routes/api/workshop/tasks/_id/report.post.mjs +1 -0
  428. package/.output/server/chunks/routes/api/workshop/tasks/_id/report.post.mjs.map +1 -1
  429. package/.output/server/chunks/routes/api/workshop/tasks/_id/retry.post.mjs +1 -0
  430. package/.output/server/chunks/routes/api/workshop/tasks/_id/retry.post.mjs.map +1 -1
  431. package/.output/server/chunks/routes/api/workshop/tasks/_id_.get.mjs +1 -0
  432. package/.output/server/chunks/routes/api/workshop/tasks/_id_.get.mjs.map +1 -1
  433. package/.output/server/chunks/routes/api/workshop/tasks.get.mjs +1 -0
  434. package/.output/server/chunks/routes/api/workshop/tasks.get.mjs.map +1 -1
  435. package/.output/server/chunks/routes/api/workshop/teams/_id/deploy.post.mjs +1 -0
  436. package/.output/server/chunks/routes/api/workshop/teams/_id/deploy.post.mjs.map +1 -1
  437. package/.output/server/chunks/routes/api/workshop/teams/_id/index.get.mjs +1 -0
  438. package/.output/server/chunks/routes/api/workshop/teams/_id/index.get.mjs.map +1 -1
  439. package/.output/server/chunks/routes/api/workshop/teams/_id/index.post.mjs +1 -0
  440. package/.output/server/chunks/routes/api/workshop/teams/_id/index.post.mjs.map +1 -1
  441. package/.output/server/chunks/routes/api/workshop/teams/_id/members/_agentId_.delete.mjs +1 -0
  442. package/.output/server/chunks/routes/api/workshop/teams/_id/members/_agentId_.delete.mjs.map +1 -1
  443. package/.output/server/chunks/routes/api/workshop/teams/_id_.delete.mjs +1 -0
  444. package/.output/server/chunks/routes/api/workshop/teams/_id_.delete.mjs.map +1 -1
  445. package/.output/server/chunks/routes/api/workshop/teams/_id_.get.mjs +1 -0
  446. package/.output/server/chunks/routes/api/workshop/teams/_id_.get.mjs.map +1 -1
  447. package/.output/server/chunks/routes/api/workshop/teams/_id_.patch.mjs +1 -0
  448. package/.output/server/chunks/routes/api/workshop/teams/_id_.patch.mjs.map +1 -1
  449. package/.output/server/chunks/routes/api/workshop/users/me.get.mjs +1 -0
  450. package/.output/server/chunks/routes/api/workshop/users/me.get.mjs.map +1 -1
  451. package/.output/server/chunks/routes/api/workshop/users/register.post.mjs +1 -0
  452. package/.output/server/chunks/routes/api/workshop/users/register.post.mjs.map +1 -1
  453. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channel-templates/_tplId_.post.mjs +1 -0
  454. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channel-templates/_tplId_.post.mjs.map +1 -1
  455. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.delete.mjs +1 -0
  456. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.delete.mjs.map +1 -1
  457. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.post.mjs +1 -0
  458. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.post.mjs.map +1 -1
  459. package/.output/server/chunks/routes/api/workshop/workspaces/index.delete.mjs +1 -0
  460. package/.output/server/chunks/routes/api/workshop/workspaces/index.delete.mjs.map +1 -1
  461. package/.output/server/chunks/routes/renderer.mjs +1 -1
  462. package/.output/server/chunks/virtual/entry.mjs +287 -85
  463. package/.output/server/chunks/virtual/precomputed.mjs +1 -1
  464. package/.output/server/index.mjs +1 -0
  465. package/.output/server/package.json +1 -1
  466. package/README-zh.md +434 -430
  467. package/README.md +5 -1
  468. package/app/components/workshop/DeviceTwinPanel.vue +34 -0
  469. package/app/components/workshop/town/TownView.vue +5 -0
  470. package/app/composables/workshop/useDcwStream.ts +15 -1
  471. package/app/config/schema.ts +54 -0
  472. package/app/pages/dcw/[id].vue +57 -0
  473. package/app/pages/settings.vue +2 -1
  474. package/config.yml +58 -1
  475. package/i18n/dicts/_en.json +56 -2
  476. package/i18n/dicts/dcwDetail.json +9 -1
  477. package/i18n/dicts/deviceTwinPanel.json +2 -1
  478. package/i18n/dicts/settings.json +48 -1
  479. package/i18n/locales/en.ts +139 -38
  480. package/i18n/locales/zh-CN.ts +139 -38
  481. package/package.json +1 -1
  482. package/scripts/_dbg-agent-dcw-rw.ts +131 -0
  483. package/scripts/_dbg-config-smoke.ts +28 -0
  484. package/scripts/_dbg-dcw-read-rest.mjs +103 -0
  485. package/scripts/_dbg-dcw-read-toolface.ts +13 -0
  486. package/scripts/_dbg-dcw-read-ui.mjs +74 -0
  487. package/scripts/_dbg-plugin-ui-wizard.mjs +125 -0
  488. package/scripts/test-config-precedence.ts +124 -0
  489. package/scripts/test-dcw-read.ts +153 -0
  490. package/server/api/workshop/dcw/[id]/read.post.ts +18 -0
  491. package/server/api/workshop/ws.ts +6 -4
  492. package/server/data/daqs.json +55 -9
  493. package/server/data/dcw-rollback.json +221 -1
  494. package/server/data/dcw-runs.json +41 -18
  495. package/server/data/dcw-writes.json +264 -0
  496. package/server/data/dcws.json +646 -4
  497. package/server/data/line-runs.json +12 -1
  498. package/server/plugins/backup.ts +7 -5
  499. package/server/plugins/retention.ts +59 -57
  500. package/server/plugins/workshop.ts +5 -4
  501. package/server/services/workshop/agents/industrial-tools.ts +50 -1
  502. package/server/services/workshop/agents/omp-agent.ts +10 -8
  503. package/server/services/workshop/agents/tool-approvals.ts +175 -174
  504. package/server/services/workshop/daq/alarm-notify.ts +102 -100
  505. package/server/services/workshop/daq/bus/mqtt.adapter.ts +14 -15
  506. package/server/services/workshop/daq/storage/sqlite.adapter.ts +5 -4
  507. package/server/services/workshop/daq/storage/timescale.adapter.ts +5 -4
  508. package/server/services/workshop/db/retention.ts +49 -50
  509. package/server/services/workshop/dcw/dcw-controller.ts +56 -1
  510. package/server/services/workshop/dcw/dcw-node.ts +233 -200
  511. package/server/services/workshop/dcw/dcw-runtime.ts +46 -9
  512. package/server/services/workshop/dcw/drivers.ts +98 -0
  513. package/server/services/workshop/dcw/recipe-rollback-manager.ts +16 -15
  514. package/server/services/workshop/logger.ts +65 -58
  515. package/server/services/workshop/runtime/embedding-provider.ts +9 -5
  516. package/server/services/workshop/runtime/manager.ts +16 -7
  517. package/server/services/workshop/runtime/memory.ts +14 -7
  518. package/server/services/workshop/settings.ts +143 -0
  519. package/shared/config/engine.mjs +14 -2
  520. package/shared/config/schema.json +48 -1
  521. package/shared/dcw-protocol.ts +21 -0
  522. package/.output/public/_nuxt/BD9D9pl4.js +0 -1
  523. package/.output/public/_nuxt/BxD8Fg_Z.js +0 -2
  524. package/.output/public/_nuxt/CwcOEM8m.js +0 -1
  525. package/.output/public/_nuxt/TownView.CI2Wpzty.css +0 -1
  526. package/.output/public/_nuxt/_id_.Ci4u30cR.css +0 -1
  527. package/.output/public/_nuxt/builds/meta/221de779-a113-4232-b9a1-31a614f5e3c7.json +0 -1
  528. package/.output/public/_nuxt/settings.BG0K9_MG.css +0 -1
  529. package/.output/server/chunks/build/_id_-CmKAEFHV.mjs.map +0 -1
  530. package/.output/server/chunks/build/_id_-xR3AChMO.mjs.map +0 -1
  531. package/.output/server/chunks/build/daq-Boz_dlAQ.mjs.map +0 -1
  532. package/.output/server/chunks/build/dcw-wTRwBAUi.mjs.map +0 -1
  533. package/.output/server/chunks/build/logs-Cdi-eXlN.mjs.map +0 -1
  534. package/.output/server/chunks/build/pages-bWKy0ZsA.mjs.map +0 -1
  535. package/.output/server/chunks/build/settings-C3T5hR2A.mjs.map +0 -1
  536. package/.output/server/chunks/build/town-CKg6Qxba.mjs.map +0 -1
  537. package/.output/server/chunks/build/useDcwStream-BkWDGaWp.mjs.map +0 -1
@@ -120,44 +120,90 @@ export default {
120
120
  disabled: 'Disabled',
121
121
  },
122
122
  settings: {
123
- title: 'System Settings',
124
- subtitle: 'Configure app basics, theme appearance and notifications',
125
- basic: 'General',
126
- basicDesc: 'Application name, description and other basics',
127
- theme: 'Appearance',
128
- themeDesc: 'Customize primary color and display mode',
129
- notification: 'Notifications',
130
- notificationDesc: 'Manage how system messages are delivered',
131
- appName: 'App Name',
132
- appDesc: 'Description',
133
- primaryColor: 'Primary Color',
134
- themeMode: 'Display Mode',
135
- appearanceDesc: 'Accent color, dark mode and language, applied live and persisted automatically (localStorage).',
136
- accentDesc: 'Warm-editorial defaults to the ink pill; pick a muted preset to preview instantly.',
137
- accentInk: 'Ink',
138
- accentStone: 'Amber',
139
- accentMoss: 'Moss',
140
- accentSlate: 'Slate',
141
- accentPlum: 'Plum',
142
- accentClay: 'Clay',
143
- accentApplied: 'Accent applied',
144
- accentReset: 'Reset to default ink (follows config.yml)',
145
- accentResetAction: 'Reset to default ink',
146
- darkDesc: 'Deep-navy control-room dark ramp; light mode keeps the editorial paper look.',
147
- languageDesc: 'Interface language (zh-CN / en); applies immediately.',
148
- systemTab: 'System',
149
- systemDesc: 'Read-only runtime parameters (sourced from config.yml via nuxt.config runtimeConfig).',
150
- identity: 'Signed in as',
151
- identityGuest: 'Not signed in (workshop data requires sign-in)',
152
- emailNotify: 'Email Notifications',
153
- emailNotifyDesc: 'Push important events to administrators via email',
154
- smsNotify: 'SMS Notifications',
155
- smsNotifyDesc: 'Deliver urgent alerts instantly via SMS',
156
- pushNotify: 'In-App Push',
157
- pushNotifyDesc: 'Real-time message alerts in the browser',
158
- saveSuccess: 'Settings saved',
159
- runtimeTab: 'Runtime config',
160
- runtime: {
123
+ 'runtime.groupMemory': 'Memory',
124
+ 'runtime.groupOmp': 'Agent Harness',
125
+ 'runtime.groupDcw': 'Write Control',
126
+ 'runtime.groupWorkshop': 'Workshop',
127
+ 'runtime.groupBackup': 'Backup',
128
+ 'runtime.groupRetention': 'Retention',
129
+ 'runtime.groupLog': 'Logs',
130
+ 'runtime.memory.primerTokens': 'Memory primer budget',
131
+ 'runtime.memory.injectTotal': 'Memory inject cap',
132
+ 'runtime.memory.maintenanceMs': 'Memory maintenance (ms)',
133
+ 'runtime.memory.expireDays': 'Episodic expiry (days)',
134
+ 'runtime.memory.expireSessionDays': 'Session expiry (days)',
135
+ 'runtime.memory.cap': 'Memory entry cap',
136
+ 'runtime.memory.reflectTrigger': 'Reflection trigger',
137
+ 'runtime.memory.embedBaseUrl': 'Embedding endpoint',
138
+ 'runtime.memory.embedModel': 'Embedding model',
139
+ 'runtime.memory.embedApiKey': 'Embedding key',
140
+ 'runtime.omp.compactEnabled': 'Auto compaction',
141
+ 'runtime.omp.compactThreshold': 'Compaction threshold',
142
+ 'runtime.omp.compactMinIntervalMs': 'Min compaction interval (ms)',
143
+ 'runtime.omp.compactWaitMs': 'Compaction wait timeout (ms)',
144
+ 'runtime.dcw.rollbackCooldownMs': 'Rollback cooldown (ms)',
145
+ 'runtime.dcw.rollbackMinWindowMs': 'Min observe window (ms)',
146
+ 'runtime.dcw.rollbackBaselineMs': 'Baseline window (ms)',
147
+ 'runtime.dcw.rollbackStaleMs': 'Open record staleness (ms)',
148
+ 'runtime.workshop.idleSweepMs': 'Idle sweep (ms)',
149
+ 'runtime.workshop.idleGraceMs': 'Idle grace (ms)',
150
+ 'runtime.backup.disabled': 'Disable auto backup',
151
+ 'runtime.backup.intervalHours': 'Backup interval (h)',
152
+ 'runtime.backup.keep': 'Backups to keep',
153
+ 'runtime.retention.disabled': 'Disable retention sweep',
154
+ 'runtime.retention.eventsDays': 'Events retention (days)',
155
+ 'runtime.retention.messagesDays': 'Messages retention (days)',
156
+ 'runtime.retention.auditDays': 'Audit retention (days)',
157
+ 'runtime.retention.approvalDays': 'Approval history retention (days)',
158
+ 'runtime.log.level': 'Log level',
159
+ 'runtime.daq.mqttQos': 'MQTT QoS',
160
+ 'runtime.daq.mqttUsername': 'MQTT username',
161
+ 'runtime.daq.mqttPassword': 'MQTT password',
162
+ 'runtime.daq.mqttCaFile': 'MQTT CA certificate',
163
+ 'runtime.daq.mqttRejectUnauthorized': 'MQTT verify certificate',
164
+ 'runtime.daq.tsRetentionH': 'Scalar TS retention (h)',
165
+ 'runtime.daq.frameRetentionH': 'Frame retention (h)',
166
+ 'runtime.daq.alarmWebhookUrl': 'Alarm webhook',
167
+ 'runtime.daq.alarmEscalateMinutes': 'Alarm escalate (min)',
168
+ 'runtime.security.hitlTimeoutMs': 'HITL approval timeout (ms)',
169
+ 'title': 'System Settings',
170
+ 'subtitle': 'Configure app basics, theme appearance and notifications',
171
+ 'basic': 'General',
172
+ 'basicDesc': 'Application name, description and other basics',
173
+ 'theme': 'Appearance',
174
+ 'themeDesc': 'Customize primary color and display mode',
175
+ 'notification': 'Notifications',
176
+ 'notificationDesc': 'Manage how system messages are delivered',
177
+ 'appName': 'App Name',
178
+ 'appDesc': 'Description',
179
+ 'primaryColor': 'Primary Color',
180
+ 'themeMode': 'Display Mode',
181
+ 'appearanceDesc': 'Accent color, dark mode and language, applied live and persisted automatically (localStorage).',
182
+ 'accentDesc': 'Warm-editorial defaults to the ink pill; pick a muted preset to preview instantly.',
183
+ 'accentInk': 'Ink',
184
+ 'accentStone': 'Amber',
185
+ 'accentMoss': 'Moss',
186
+ 'accentSlate': 'Slate',
187
+ 'accentPlum': 'Plum',
188
+ 'accentClay': 'Clay',
189
+ 'accentApplied': 'Accent applied',
190
+ 'accentReset': 'Reset to default ink (follows config.yml)',
191
+ 'accentResetAction': 'Reset to default ink',
192
+ 'darkDesc': 'Deep-navy control-room dark ramp; light mode keeps the editorial paper look.',
193
+ 'languageDesc': 'Interface language (zh-CN / en); applies immediately.',
194
+ 'systemTab': 'System',
195
+ 'systemDesc': 'Read-only runtime parameters (sourced from config.yml via nuxt.config runtimeConfig).',
196
+ 'identity': 'Signed in as',
197
+ 'identityGuest': 'Not signed in (workshop data requires sign-in)',
198
+ 'emailNotify': 'Email Notifications',
199
+ 'emailNotifyDesc': 'Push important events to administrators via email',
200
+ 'smsNotify': 'SMS Notifications',
201
+ 'smsNotifyDesc': 'Deliver urgent alerts instantly via SMS',
202
+ 'pushNotify': 'In-App Push',
203
+ 'pushNotifyDesc': 'Real-time message alerts in the browser',
204
+ 'saveSuccess': 'Settings saved',
205
+ 'runtimeTab': 'Runtime config',
206
+ 'runtime': {
161
207
  title: 'Runtime config',
162
208
  desc: 'Server-backed runtime parameters: live keys apply instantly over SSE (no reload); restart keys take effect on the next launch of the matching mode. Same channel as the `aw config` CLI.',
163
209
  live: 'live',
@@ -593,6 +639,52 @@ export default {
593
639
  k3lha20031: 'Raw points',
594
640
  },
595
641
  logs: {
642
+ 'src.user': '用户',
643
+ 'src.system': 'System',
644
+ 'kind.write': 'Apply',
645
+ 'kind.manual': '人工',
646
+ 'kind.alarm': 'Alarm',
647
+ 'kind.line': 'Line',
648
+ 'kind.recipe': 'Recipe',
649
+ 'kind.rollback': '回退',
650
+ 'kind.daq': 'DAQ',
651
+ 'kind.system': 'System',
652
+ 'title': '运维日志',
653
+ 'sub': '全操作统一记录:下发了什么控制、用户与 Agent 做了什么操作;按产线/产品/Recipe 隔离查询',
654
+ 'live': '实时',
655
+ 'liveHint': 'WS 实时接收操作事件(仅摘要渲染;完整详情查询于下表)',
656
+ 'all': 'All',
657
+ 'fLine': 'Line',
658
+ 'fProduct': 'Product',
659
+ 'fSource': '来源',
660
+ 'fKind': '分类',
661
+ 'fKeyword': '关键词',
662
+ 'fKeywordPh': '搜索摘要/操作/操作者…',
663
+ 'query': 'Query',
664
+ 'reset': 'Reset',
665
+ 'thTime': 'Time',
666
+ 'thActor': '操作者',
667
+ 'thSummary': '事件摘要',
668
+ 'thScope': '归属(产线/产品/Recipe)',
669
+ 'thDetail': 'Details',
670
+ 'expand': 'Details',
671
+ 'fold': 'Collapse',
672
+ 'loading': 'Querying…',
673
+ 'empty': '无匹配日志',
674
+ 'src.user': '用户',
675
+ 'src.system': 'System',
676
+ 'kind.write': 'Apply',
677
+ 'kind.manual': '人工',
678
+ 'kind.alarm': 'Alarm',
679
+ 'kind.line': 'Line',
680
+ 'kind.recipe': 'Recipe',
681
+ 'kind.rollback': '回退',
682
+ 'kind.daq': 'DAQ',
683
+ 'kind.system': 'System',
684
+ 'mSummary': '记录内容',
685
+ 'mSummaryPh': '如:更换 3 号烘箱加热丝,当前批次延长保温 10 分钟',
686
+ 'mSubmit': '入册',
687
+ 'mOk': '已入册',
596
688
  'src.user': '用户',
597
689
  'src.system': 'System',
598
690
  'kind.write': 'Apply',
@@ -726,6 +818,14 @@ export default {
726
818
  k1bphrb3048: 'Delete failed',
727
819
  },
728
820
  dcwDetail: {
821
+ k9r7d4e016: 'Poll read (ms)',
822
+ k9r7d4e017: 'Default 5000ms; 0 = manual read only',
823
+ k9r7d4e018: 'PLC reading',
824
+ k9r7d4e019: 'No reading yet (poll read off or driver lacks read support)',
825
+ k9r7d4e020: 'Read current PLC value',
826
+ k9r7d4e021: 'Read',
827
+ k9r7d4e022: 'Manual',
828
+ k9r7d4e023: 'Default 5s',
729
829
  k1lzfi4g180: '({p0} params)',
730
830
  k6vgks7181: 'Batch {p0}',
731
831
  k1alcbyu182: 'Node {p0} write OK: {p1}',
@@ -1320,6 +1420,7 @@ export default {
1320
1420
  k15mwzt7031: 'Type a message/notice ({\'@\'} to target a member, defaults to lead)… ⌘/Ctrl+Enter to send',
1321
1421
  },
1322
1422
  deviceTwinPanel: {
1423
+ k9r7d4e030: 'Current PLC reading (actual)',
1323
1424
  kq2jssk008: 'Recipe Process Window',
1324
1425
  k1iwj796009: 'Node Range',
1325
1426
  kxddket010: '超出{p0} {p1}',
@@ -120,44 +120,90 @@ export default {
120
120
  disabled: '已禁用',
121
121
  },
122
122
  settings: {
123
- title: '系统设置',
124
- subtitle: '配置应用基本信息、主题外观与通知偏好',
125
- basic: '基本设置',
126
- basicDesc: '应用的名称、描述等基础信息',
127
- theme: '主题设置',
128
- themeDesc: '自定义主色调与显示模式',
129
- notification: '通知设置',
130
- notificationDesc: '管理系统消息通知的推送方式',
131
- appName: '应用名称',
132
- appDesc: '应用描述',
133
- primaryColor: '主题色',
134
- themeMode: '显示模式',
135
- appearanceDesc: '主题色、深浅模式与语言偏好,实时生效并自动持久化(localStorage)。',
136
- accentDesc: '默认品牌绿,与 Digital Twin 控制室同源;可选低饱和预设,悬停预览即时生效。',
137
- accentInk: '品牌',
138
- accentStone: '琥珀',
139
- accentMoss: '苔绿',
140
- accentSlate: '靛蓝',
141
- accentPlum: '紫檀',
142
- accentClay: '陶赭',
143
- accentApplied: '主题色已应用',
144
- accentReset: '已恢复默认主题色(跟随 config.yml)',
145
- accentResetAction: '恢复默认',
146
- darkDesc: '深海军蓝控制室暗阶,与数字孪生空间同一视觉语言;亮色模式保留编辑风格。',
147
- languageDesc: '界面语言(zh-CN / en),选择即生效。',
148
- systemTab: '系统',
149
- systemDesc: '只读运行参数(同源 config.yml,经 nuxt.config runtimeConfig 注入)。',
150
- identity: '当前身份',
151
- identityGuest: '当前未登录(工作台数据需登录后查看)',
152
- emailNotify: '邮件通知',
153
- emailNotifyDesc: '重要事件通过邮件推送给管理员',
154
- smsNotify: '短信通知',
155
- smsNotifyDesc: '紧急告警通过短信即时送达',
156
- pushNotify: '站内推送',
157
- pushNotifyDesc: '浏览器内实时消息提醒',
158
- saveSuccess: '设置已保存',
159
- runtimeTab: '运行配置',
160
- runtime: {
123
+ 'runtime.groupMemory': '记忆系统',
124
+ 'runtime.groupOmp': 'Agent Harness',
125
+ 'runtime.groupDcw': '数控写控',
126
+ 'runtime.groupWorkshop': '车间运行',
127
+ 'runtime.groupBackup': '数据备份',
128
+ 'runtime.groupRetention': '数据保留',
129
+ 'runtime.groupLog': '日志',
130
+ 'runtime.memory.primerTokens': '记忆引子预算',
131
+ 'runtime.memory.injectTotal': '记忆注入硬顶',
132
+ 'runtime.memory.maintenanceMs': '记忆维护周期(ms)',
133
+ 'runtime.memory.expireDays': '情景记忆过期(天)',
134
+ 'runtime.memory.expireSessionDays': '会话记忆过期(天)',
135
+ 'runtime.memory.cap': '记忆条目上限',
136
+ 'runtime.memory.reflectTrigger': '反思触发阈值',
137
+ 'runtime.memory.embedBaseUrl': 'Embedding 端点',
138
+ 'runtime.memory.embedModel': 'Embedding 模型',
139
+ 'runtime.memory.embedApiKey': 'Embedding 密钥',
140
+ 'runtime.omp.compactEnabled': '上下文自动压缩',
141
+ 'runtime.omp.compactThreshold': '压缩阈值',
142
+ 'runtime.omp.compactMinIntervalMs': '压缩最小间隔(ms)',
143
+ 'runtime.omp.compactWaitMs': '压缩等待超时(ms)',
144
+ 'runtime.dcw.rollbackCooldownMs': '回退冷却(ms)',
145
+ 'runtime.dcw.rollbackMinWindowMs': '回退最小观察窗(ms)',
146
+ 'runtime.dcw.rollbackBaselineMs': '基线稳定窗(ms)',
147
+ 'runtime.dcw.rollbackStaleMs': 'open 记录过期(ms)',
148
+ 'runtime.workshop.idleSweepMs': '空产线扫描(ms)',
149
+ 'runtime.workshop.idleGraceMs': '空闲宽限(ms)',
150
+ 'runtime.backup.disabled': '禁用自动备份',
151
+ 'runtime.backup.intervalHours': '备份间隔(h)',
152
+ 'runtime.backup.keep': '备份保留份数',
153
+ 'runtime.retention.disabled': '禁用数据保留策略',
154
+ 'runtime.retention.eventsDays': '事件保留(天)',
155
+ 'runtime.retention.messagesDays': '消息保留(天)',
156
+ 'runtime.retention.auditDays': '审计日志保留(天)',
157
+ 'runtime.retention.approvalDays': '审批历史保留(天)',
158
+ 'runtime.log.level': '日志级别',
159
+ 'runtime.daq.mqttQos': 'MQTT QoS',
160
+ 'runtime.daq.mqttUsername': 'MQTT 用户名',
161
+ 'runtime.daq.mqttPassword': 'MQTT 密码',
162
+ 'runtime.daq.mqttCaFile': 'MQTT CA 证书',
163
+ 'runtime.daq.mqttRejectUnauthorized': 'MQTT 校验证书',
164
+ 'runtime.daq.tsRetentionH': '标量时序保留(h)',
165
+ 'runtime.daq.frameRetentionH': '帧元数据保留(h)',
166
+ 'runtime.daq.alarmWebhookUrl': '告警 Webhook',
167
+ 'runtime.daq.alarmEscalateMinutes': '告警升级时限(min)',
168
+ 'runtime.security.hitlTimeoutMs': 'HITL 审批超时(ms)',
169
+ 'title': '系统设置',
170
+ 'subtitle': '配置应用基本信息、主题外观与通知偏好',
171
+ 'basic': '基本设置',
172
+ 'basicDesc': '应用的名称、描述等基础信息',
173
+ 'theme': '主题设置',
174
+ 'themeDesc': '自定义主色调与显示模式',
175
+ 'notification': '通知设置',
176
+ 'notificationDesc': '管理系统消息通知的推送方式',
177
+ 'appName': '应用名称',
178
+ 'appDesc': '应用描述',
179
+ 'primaryColor': '主题色',
180
+ 'themeMode': '显示模式',
181
+ 'appearanceDesc': '主题色、深浅模式与语言偏好,实时生效并自动持久化(localStorage)。',
182
+ 'accentDesc': '默认品牌绿,与 Digital Twin 控制室同源;可选低饱和预设,悬停预览即时生效。',
183
+ 'accentInk': '品牌',
184
+ 'accentStone': '琥珀',
185
+ 'accentMoss': '苔绿',
186
+ 'accentSlate': '靛蓝',
187
+ 'accentPlum': '紫檀',
188
+ 'accentClay': '陶赭',
189
+ 'accentApplied': '主题色已应用',
190
+ 'accentReset': '已恢复默认主题色(跟随 config.yml)',
191
+ 'accentResetAction': '恢复默认',
192
+ 'darkDesc': '深海军蓝控制室暗阶,与数字孪生空间同一视觉语言;亮色模式保留编辑风格。',
193
+ 'languageDesc': '界面语言(zh-CN / en),选择即生效。',
194
+ 'systemTab': '系统',
195
+ 'systemDesc': '只读运行参数(同源 config.yml,经 nuxt.config runtimeConfig 注入)。',
196
+ 'identity': '当前身份',
197
+ 'identityGuest': '当前未登录(工作台数据需登录后查看)',
198
+ 'emailNotify': '邮件通知',
199
+ 'emailNotifyDesc': '重要事件通过邮件推送给管理员',
200
+ 'smsNotify': '短信通知',
201
+ 'smsNotifyDesc': '紧急告警通过短信即时送达',
202
+ 'pushNotify': '站内推送',
203
+ 'pushNotifyDesc': '浏览器内实时消息提醒',
204
+ 'saveSuccess': '设置已保存',
205
+ 'runtimeTab': '运行配置',
206
+ 'runtime': {
161
207
  title: '运行配置',
162
208
  desc: '服务端持久化的运行参数:live 键保存即热重载生效(无需刷新),restart 键下次启动生效。与 CLI(aw config)同源同通道。',
163
209
  live: '实时',
@@ -593,6 +639,52 @@ export default {
593
639
  k3lha20031: '原始点',
594
640
  },
595
641
  logs: {
642
+ 'src.user': '用户',
643
+ 'src.system': '系统',
644
+ 'kind.write': '下发',
645
+ 'kind.manual': '人工',
646
+ 'kind.alarm': '告警',
647
+ 'kind.line': '产线',
648
+ 'kind.recipe': '配方',
649
+ 'kind.rollback': '回退',
650
+ 'kind.daq': '数采',
651
+ 'kind.system': '系统',
652
+ 'title': '运维日志',
653
+ 'sub': '全操作统一记录:下发了什么控制、用户与 Agent 做了什么操作;按产线/产品/Recipe 隔离查询',
654
+ 'live': '实时',
655
+ 'liveHint': 'WS 实时接收操作事件(仅摘要渲染;完整详情查询于下表)',
656
+ 'all': '全部',
657
+ 'fLine': '产线',
658
+ 'fProduct': '产品',
659
+ 'fSource': '来源',
660
+ 'fKind': '分类',
661
+ 'fKeyword': '关键词',
662
+ 'fKeywordPh': '搜索摘要/操作/操作者…',
663
+ 'query': '查询',
664
+ 'reset': '重置',
665
+ 'thTime': '时间',
666
+ 'thActor': '操作者',
667
+ 'thSummary': '事件摘要',
668
+ 'thScope': '归属(产线/产品/Recipe)',
669
+ 'thDetail': '详情',
670
+ 'expand': '详情',
671
+ 'fold': '收起',
672
+ 'loading': '查询中…',
673
+ 'empty': '无匹配日志',
674
+ 'src.user': '用户',
675
+ 'src.system': '系统',
676
+ 'kind.write': '下发',
677
+ 'kind.manual': '人工',
678
+ 'kind.alarm': '告警',
679
+ 'kind.line': '产线',
680
+ 'kind.recipe': '配方',
681
+ 'kind.rollback': '回退',
682
+ 'kind.daq': '数采',
683
+ 'kind.system': '系统',
684
+ 'mSummary': '记录内容',
685
+ 'mSummaryPh': '如:更换 3 号烘箱加热丝,当前批次延长保温 10 分钟',
686
+ 'mSubmit': '入册',
687
+ 'mOk': '已入册',
596
688
  'src.user': '用户',
597
689
  'src.system': '系统',
598
690
  'kind.write': '下发',
@@ -725,6 +817,14 @@ export default {
725
817
  k1bphrb3048: '删除失败',
726
818
  },
727
819
  dcwDetail: {
820
+ k9r7d4e016: '周期读(ms)',
821
+ k9r7d4e017: '缺省 5000ms;0 = 仅手动读取',
822
+ k9r7d4e018: 'PLC 读数',
823
+ k9r7d4e019: '暂无读数(周期读未开启或驱动不支持读取)',
824
+ k9r7d4e020: '读取 PLC 当前值',
825
+ k9r7d4e021: '读取',
826
+ k9r7d4e022: '手动',
827
+ k9r7d4e023: '默认 5s',
728
828
  k1lzfi4g180: '({p0} 参数)',
729
829
  k6vgks7181: '批次 {p0}',
730
830
  k1alcbyu182: '节点 {p0} 下发成功:{p1}',
@@ -1319,6 +1419,7 @@ export default {
1319
1419
  k15mwzt7031: '输入消息/通知({\'@\'} 成员指定目标,缺省 lead)… ⌘/Ctrl+Enter 发送',
1320
1420
  },
1321
1421
  deviceTwinPanel: {
1422
+ k9r7d4e030: 'PLC 当前读数(实际值)',
1322
1423
  kq2jssk008: '配方工艺窗口',
1323
1424
  k1iwj796009: '节点量程',
1324
1425
  kxddket010: '超出{p0} {p1}',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentworkshop",
3
- "version": "0.6.1",
3
+ "version": "0.7.1",
4
4
  "type": "module",
5
5
  "description": "AgentWorkShop 软件开发系统 - 基于 Nuxt 4 的配置驱动运行范式",
6
6
  "license": "PolyForm-Noncommercial-1.0.0",
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Agent 数控读写真机验证(协议级):
3
+ * ①真实 omp --mode rpc 子进程接受含 dcw_read/dcw_control 的 set_host_tools
4
+ * ②真实 OmpRpcAgentImpl.handleHostTool 分发 → toolDcwRead/toolDcwControl 执行体:
5
+ * mock 节点写读对照 / 真实 Modbus TCP(1502 从站 40023)写读 roundtrip / 越权与量程联锁。
6
+ * 数据目录 AW_HOME 隔离,不触碰检出内 .AgentWorkShop。
7
+ * 运行: npx tsx --tsconfig .nuxt/tsconfig.server.json scripts/_dbg-agent-dcw-rw.ts
8
+ */
9
+ import { spawn } from 'node:child_process'
10
+ import { mkdtempSync } from 'node:fs'
11
+ import { tmpdir } from 'node:os'
12
+ import { join } from 'node:path'
13
+
14
+ // 进程级隔离:配置根落在一次性目录(须在业务模块 import 前设置)
15
+ const awHome = mkdtempSync(join(tmpdir(), 'aw-agent-dcw-rw-'))
16
+ process.env.AW_MODE = 'home'
17
+ process.env.AW_HOME = awHome
18
+ process.env.NO_PROXY = '127.0.0.1,localhost'
19
+
20
+ let failures = 0
21
+ const check = (name: string, ok: boolean, detail = ''): void => {
22
+ console.log(` ${ok ? 'PASS' : 'FAIL'} ${name}${detail ? ` — ${detail}` : ''}`)
23
+ if (!ok) failures += 1
24
+ }
25
+
26
+ // ===== 环境准备(隔离配置根内):mock 节点 + 真实 Modbus 节点 + Agent 绑定 =====
27
+ const { getDcwController } = await import('../server/services/workshop/dcw/dcw-controller')
28
+ const { getAgentNodeBindingRepo } = await import('../server/services/workshop/agents/node-bindings.repo')
29
+ const AGENT = 'agent-rw-verify'
30
+ const mockNode = getDcwController().create({ templateRef: 'dcw-temp-sp', name: 'Agent验证·mock', driver: 'mock', driverConfig: { key: 'agent-rw-mock' }, readIntervalMs: 0 })
31
+ const modbusNode = getDcwController().create({
32
+ templateRef: 'dcw-temp-sp', name: 'Agent验证·Modbus真实', driver: 'modbus-tcp', readIntervalMs: 0,
33
+ min: 0, max: 300,
34
+ driverConfig: { host: '127.0.0.1', port: 1502, unitId: 1, register: 40023, dataType: 'float32', byteOrder: 'big' },
35
+ })
36
+ const repo = getAgentNodeBindingRepo()
37
+ repo.bind(AGENT, mockNode.id, 'dcw', 'auto')
38
+ repo.bind(AGENT, modbusNode.id, 'dcw', 'auto')
39
+ console.log(`mock=${mockNode.id} modbus=${modbusNode.id}(40023)\n`)
40
+
41
+ // ===== ① 真实 omp 子进程:set_host_tools 含 dcw_read/dcw_control → 协议接受 =====
42
+ console.log('--- ① 真实 omp 子进程工具面注入 ---')
43
+ const { hostToolsForRole, OmpRpcAgentImpl } = await import('../server/services/workshop/agents/omp-agent')
44
+
45
+ {
46
+ const tools = hostToolsForRole('worker')
47
+ const child = spawn('omp', ['--mode', 'rpc'], { stdio: ['pipe', 'pipe', 'pipe'], windowsHide: true })
48
+ let buf = ''
49
+ let sent = false
50
+ let accepted: unknown = null
51
+ await new Promise<unknown>((resolve) => {
52
+ const timer = setTimeout(() => resolve('timeout'), 30_000)
53
+ child.stdout!.setEncoding('utf-8')
54
+ child.stdout!.on('data', (chunk: string) => {
55
+ buf += chunk
56
+ let idx: number
57
+ while ((idx = buf.indexOf('\n')) >= 0) {
58
+ const line = buf.slice(0, idx)
59
+ buf = buf.slice(idx + 1)
60
+ if (!line.trim()) continue
61
+ try {
62
+ const frame = JSON.parse(line)
63
+ if (frame.type === 'ready' && !sent) {
64
+ sent = true
65
+ child.stdin!.write(`${JSON.stringify({ id: 'req_tools', type: 'set_host_tools', tools })}\n`)
66
+ }
67
+ else if (frame.type === 'response' && frame.id === 'req_tools') {
68
+ clearTimeout(timer)
69
+ accepted = frame
70
+ resolve(frame)
71
+ }
72
+ }
73
+ catch { /* 非 JSON 行忽略 */ }
74
+ }
75
+ })
76
+ child.on('exit', () => resolve(accepted ?? 'exit'))
77
+ })
78
+ child.kill()
79
+ const resp = accepted as { success?: boolean, data?: { toolNames?: string[] } } | null
80
+ const names = resp?.data?.toolNames ?? []
81
+ check('①真实 omp 接受含 dcw_read/dcw_control 的 set_host_tools',
82
+ !!resp && resp.success === true && names.includes('dcw_read') && names.includes('dcw_control'),
83
+ `工具数=${names.length}`)
84
+ }
85
+
86
+ // ===== ② 真实分发 + 执行:handleHostTool → dcw_read / dcw_control =====
87
+ console.log('\n--- ② Agent 工具真实执行(mock) ---')
88
+ {
89
+ const impl = new OmpRpcAgentImpl({ agentId: AGENT, name: '读写验证员', role: 'worker', channelId: 'ch-rw-v' })
90
+ // 真实 server 里 workspace 由 run 上下文注入 ensureClient;工具执行体不依赖 workspace
91
+ // 内函数 —— harness 注入最小桩以通过就绪门(与 server 行为一致:非空即放行)
92
+ ;(impl as unknown as { workspace: unknown }).workspace = { listAgents: async () => [] }
93
+ const handle = (impl as unknown as Record<string, (req: unknown) => Promise<{ text: string, isError?: boolean }>>).handleHostTool.bind(impl)
94
+
95
+ const r0 = await handle({ toolName: 'dcw_read', arguments: { node_id: mockNode.id } })
96
+ check('②dcw_read:mock 未写入如实报失败(鉴权通过)', r0.isError === true && /读取失败/.test(r0.text) && !/无权/.test(r0.text), r0.text.slice(0, 90))
97
+
98
+ const w = await handle({ toolName: 'dcw_control', arguments: { node_id: mockNode.id, value: 175.5, hypothesis: 'Agent 真机验证写入' } })
99
+ check('②Agent 下发 175.5 成功(开优化记录)', !w.isError && /下发成功/.test(w.text), w.text.replace(/\n/g, ' ').slice(0, 100))
100
+ const r1 = await handle({ toolName: 'dcw_read', arguments: { node_id: mockNode.id } })
101
+ check('②dcw_read 读回 ACT=175.5 且与 SET 一致', !r1.isError && /175\.5/.test(r1.text) && /一致/.test(r1.text), r1.text.replace(/\n/g, ' ').slice(0, 120))
102
+
103
+ // 越权:未绑定节点读取/写入均拒
104
+ const rDeny = await handle({ toolName: 'dcw_read', arguments: { node_id: 'dw-not-bound' } })
105
+ const wDeny = await handle({ toolName: 'dcw_control', arguments: { node_id: 'dw-not-bound', value: 1 } })
106
+ check('②未绑定节点读取/写入均被拒', rDeny.isError === true && wDeny.isError === true && /无权/.test(rDeny.text) && /无权/.test(wDeny.text))
107
+
108
+ // 量程联锁:越工艺安全量程下发被拒
109
+ const wRange = await handle({ toolName: 'dcw_control', arguments: { node_id: mockNode.id, value: 999 } })
110
+ check('②越量程下发被拒(999 ∉ [150,200])', wRange.isError === true && /越出|量程/.test(wRange.text), wRange.text.slice(0, 80))
111
+ }
112
+
113
+ // ===== ③ 真实 Modbus TCP:Agent 写 → 读(真寄存器 roundtrip) =====
114
+ console.log('\n--- ③ Agent 经真实 Modbus(1502 从站 40023)读写 ---')
115
+ {
116
+ const impl = new OmpRpcAgentImpl({ agentId: AGENT, name: '读写验证员', role: 'worker', channelId: 'ch-rw-v' })
117
+ ;(impl as unknown as { workspace: unknown }).workspace = { listAgents: async () => [] }
118
+ const handle = (impl as unknown as Record<string, (req: unknown) => Promise<{ text: string, isError?: boolean }>>).handleHostTool.bind(impl)
119
+
120
+ const wm = await handle({ toolName: 'dcw_control', arguments: { node_id: modbusNode.id, value: 4.5, hypothesis: '真实链路验证' } })
121
+ check('③Agent 经真实 Modbus 下发 4.5 成功(同址回读一致)', !wm.isError && /下发成功/.test(wm.text), wm.text.replace(/\n/g, ' ').slice(0, 110))
122
+ const rm = await handle({ toolName: 'dcw_read', arguments: { node_id: modbusNode.id } })
123
+ check('③Agent 从真实寄存器读回 4.5(ACT=SET)', !rm.isError && /4\.5/.test(rm.text) && /一致/.test(rm.text), rm.text.replace(/\n/g, ' ').slice(0, 130))
124
+
125
+ const wm2 = await handle({ toolName: 'dcw_control', arguments: { node_id: modbusNode.id, value: 12.75 } })
126
+ const rm2 = await handle({ toolName: 'dcw_read', arguments: { node_id: modbusNode.id } })
127
+ check('③第二轮:写 12.75 → 读回 12.75', !wm2.isError && !rm2.isError && /12\.75/.test(rm2.text), rm2.text.replace(/\n/g, ' ').slice(0, 110))
128
+ }
129
+
130
+ console.log(failures === 0 ? '\nAGENT-DCW-RW ALL PASS' : `\nAGENT-DCW-RW FAILED(${failures})`)
131
+ process.exit(failures === 0 ? 0 : 1)
@@ -0,0 +1,28 @@
1
+ /**
2
+ * 配置链冒烟:env(AW_* + 历史别名)覆盖 → config.yml → zod 默认。
3
+ * 运行: AW_MEMORY_PRIMER_TOKENS=222 DAQ_FRAME_RETENTION_H=999 BACKUP_KEEP=3 \
4
+ * RETENTION_DISABLED=1 AWSHOP_LOG_LEVEL=debug npx tsx ... scripts/_dbg-config-smoke.ts
5
+ */
6
+ import { loadConfig } from '../app/config'
7
+
8
+ const c = loadConfig()
9
+ const rows: Array<[string, unknown, unknown]> = [
10
+ ['memory.primer_tokens (env 222)', c.memory.primer_tokens, 222],
11
+ ['memory.inject_total (默认 500)', c.memory.inject_total, 500],
12
+ ['daq.frameRetentionH (别名 999)', c.daq.frameRetentionH, 999],
13
+ ['backup.keep (env AW_BACKUP_KEEP 3)', c.backup.keep, 3],
14
+ ['retention.disabled (别名 RETENTION_DISABLED=1 → true)', c.retention.disabled, true],
15
+ ['log.level (别名 AWSHOP_LOG_LEVEL=debug)', c.log.level, 'debug'],
16
+ ['omp.compact_threshold (默认 0.7)', c.omp.compact_threshold, 0.7],
17
+ ['security.hitl_timeout_ms (默认 180000)', c.security.hitl_timeout_ms, 180000],
18
+ ['dcw.rollback_cooldown_ms (默认 300000)', c.dcw.rollback_cooldown_ms, 300000],
19
+ ['workshop.idle_grace_ms (默认 120000)', c.workshop.idle_grace_ms, 120000],
20
+ ['retention.audit_days (默认 90)', c.retention.audit_days, 90],
21
+ ]
22
+ let failed = 0
23
+ for (const [name, got, want] of rows) {
24
+ const ok = got === want
25
+ console.log(` ${ok ? 'PASS' : 'FAIL'} ${name} → ${String(got)}`)
26
+ if (!ok) failed++
27
+ }
28
+ process.exit(failed === 0 ? 0 : 1)