agentworkshop 0.7.52 → 0.7.53

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 (459) hide show
  1. package/.AgentWorkShop/prompts/host-tools.json +70 -1
  2. package/.output/.AgentWorkShop/prompts/host-tools.json +70 -1
  3. package/.output/.AgentWorkShop/schema.json +2 -0
  4. package/.output/nitro.json +1 -1
  5. package/.output/public/_nuxt/{D0ldVwl-.js → 77DRSnQv.js} +1 -1
  6. package/.output/public/_nuxt/8oRmGaAV.js +1 -0
  7. package/.output/public/_nuxt/{BPou3U7b.js → BLnLjzka.js} +1 -1
  8. package/.output/public/_nuxt/{CFQyYMEn2.js → BSdJTnk12.js} +1 -1
  9. package/.output/public/_nuxt/{C4lagVdN2.js → BUD1CNvB2.js} +1 -1
  10. package/.output/public/_nuxt/{CTvh8v4T.js → BXR3tgEk.js} +1 -1
  11. package/.output/public/_nuxt/{Cbeifv55.js → BhlRInVa.js} +1 -1
  12. package/.output/public/_nuxt/{mNnuUoSy.js → BkfA3BbD.js} +1 -1
  13. package/.output/public/_nuxt/{ChGuLxwW2.js → BpcQDwKM2.js} +1 -1
  14. package/.output/public/_nuxt/{DQMbdg4t.js → BwlGxRxA.js} +1 -1
  15. package/.output/public/_nuxt/{Bt2ZL5332.js → C4sQKuhk2.js} +1 -1
  16. package/.output/public/_nuxt/{CkPxL4UX2.js → CBUIODly2.js} +1 -1
  17. package/.output/public/_nuxt/CR-ILcRu2.js +1 -0
  18. package/.output/public/_nuxt/CZLnEnbE.js +14 -0
  19. package/.output/public/_nuxt/{qPsch_ny2.js → Chxx-DIE2.js} +1 -1
  20. package/.output/public/_nuxt/{BiUhxH3t2.js → CjwxhpwR2.js} +1 -1
  21. package/.output/public/_nuxt/{B9cGf8mg.js → CvGYm7w8.js} +1 -1
  22. package/.output/public/_nuxt/{B9BmiUil.js → DAGuPgXa.js} +1 -1
  23. package/.output/public/_nuxt/{DefDtlKK.js → DE6H1HdJ.js} +1 -1
  24. package/.output/public/_nuxt/{D_Ce9Fon2.js → DFhyhDGa2.js} +1 -1
  25. package/.output/public/_nuxt/{BXx9AxdF2.js → DSqMyLCV2.js} +1 -1
  26. package/.output/public/_nuxt/{B8zP7kaj2.js → DV5joWTn2.js} +1 -1
  27. package/.output/public/_nuxt/{Da90gveK.js → DVOR2pWg.js} +1 -1
  28. package/.output/public/_nuxt/DWsgRq2c.js +1 -0
  29. package/.output/public/_nuxt/{mgWHSRc8.js → DZDi8inD.js} +1 -1
  30. package/.output/public/_nuxt/{xQX5r6tW.js → Dep0Hc9w.js} +1 -1
  31. package/.output/public/_nuxt/{evt5VGDh.js → DffgG8vT.js} +1 -1
  32. package/.output/public/_nuxt/{B_opxrHJ.js → DlCktWDT.js} +1 -1
  33. package/.output/public/_nuxt/{BVzw5a_0.js → DmzmgYHb.js} +1 -1
  34. package/.output/public/_nuxt/PluginSlot.CGH0vb95.css +1 -0
  35. package/.output/public/_nuxt/{ty5W5QwO.js → WmMwIS4y.js} +1 -1
  36. package/.output/public/_nuxt/{_id_.DamiFT0Q.css → _id_.rdGx-UDx.css} +1 -1
  37. package/.output/public/_nuxt/{BgEDwFMf.js → _kUzq9VF.js} +1 -1
  38. package/.output/public/_nuxt/_wsId_.XjmieZaJ.css +1 -0
  39. package/.output/public/_nuxt/{C00Rd6Cg.js → aV6YPjg0.js} +1 -1
  40. package/.output/public/_nuxt/builds/latest.json +1 -1
  41. package/.output/public/_nuxt/builds/meta/5ccc21c2-aba0-4b63-9a13-410e0569e345.json +1 -0
  42. package/.output/public/_nuxt/{default.CXb_zoN6.css → default.CyLpQD1C.css} +1 -1
  43. package/.output/public/_nuxt/o9rJf00k.js +1 -0
  44. package/.output/public/_nuxt/sl1EEoCr2.js +21 -0
  45. package/.output/public/robots.txt +3 -0
  46. package/.output/server/chunks/_/binding-authz.mjs +1 -1
  47. package/.output/server/chunks/_/character-asset.repo.mjs +1 -1
  48. package/.output/server/chunks/_/entity.mjs +1 -1
  49. package/.output/server/chunks/_/host-bindings.mjs +1 -1
  50. package/.output/server/chunks/_/nitro.mjs +1945 -1420
  51. package/.output/server/chunks/_/nitro.mjs.map +1 -1
  52. package/.output/server/chunks/_/scene-layout.repo.mjs +1 -1
  53. package/.output/server/chunks/build/{PluginSlot-D2WUZgbp.mjs → PluginSlot-CT4YaNrB.mjs} +5 -5
  54. package/.output/server/chunks/build/{PluginSlot-D2WUZgbp.mjs.map → PluginSlot-CT4YaNrB.mjs.map} +1 -1
  55. package/.output/server/chunks/build/TownView-fP9BiALv.mjs +1 -1
  56. package/.output/server/chunks/build/{_id_-BUpQSlzo.mjs → _id_-CK-QFrDV.mjs} +55 -51
  57. package/.output/server/chunks/build/_id_-CK-QFrDV.mjs.map +1 -0
  58. package/.output/server/chunks/build/{_wsId_-C4L9fVHC.mjs → _wsId_-DdqXzycE.mjs} +320 -202
  59. package/.output/server/chunks/build/{_wsId_-C4L9fVHC.mjs.map → _wsId_-DdqXzycE.mjs.map} +1 -1
  60. package/.output/server/chunks/build/{agents-ydYu-Ol9.mjs → agents-DqICy4AL.mjs} +6 -6
  61. package/.output/server/chunks/build/{agents-ydYu-Ol9.mjs.map → agents-DqICy4AL.mjs.map} +1 -1
  62. package/.output/server/chunks/build/{channel-templates-DP1ndA5K.mjs → channel-templates-gdCLajKy.mjs} +2 -2
  63. package/.output/server/chunks/build/{channel-templates-DP1ndA5K.mjs.map → channel-templates-gdCLajKy.mjs.map} +1 -1
  64. package/.output/server/chunks/build/daq-N69AOtgw.mjs +1 -1
  65. package/.output/server/chunks/build/dcw-CN9d3Rs7.mjs +1 -1
  66. package/.output/server/chunks/build/{default-DCf9tn1i.mjs → default-CXUe4HL7.mjs} +65 -62
  67. package/.output/server/chunks/build/{default-DCf9tn1i.mjs.map → default-CXUe4HL7.mjs.map} +1 -1
  68. package/.output/server/chunks/build/{pages-BzmrmLL_.mjs → pages-CRMeXrxG.mjs} +3 -3
  69. package/.output/server/chunks/build/{pages-BzmrmLL_.mjs.map → pages-CRMeXrxG.mjs.map} +1 -1
  70. package/.output/server/chunks/build/{plugins-DSka7-vS.mjs → plugins-NAS9MQ5r.mjs} +2 -2
  71. package/.output/server/chunks/build/{plugins-DSka7-vS.mjs.map → plugins-NAS9MQ5r.mjs.map} +1 -1
  72. package/.output/server/chunks/build/{schedules-BYR-lA1k.mjs → schedules-D8vYHgQ5.mjs} +2 -2
  73. package/.output/server/chunks/build/{schedules-BYR-lA1k.mjs.map → schedules-D8vYHgQ5.mjs.map} +1 -1
  74. package/.output/server/chunks/build/{settings-UyZ78w2e.mjs → settings-B7HA-sdb.mjs} +3 -3
  75. package/.output/server/chunks/build/{settings-UyZ78w2e.mjs.map → settings-B7HA-sdb.mjs.map} +1 -1
  76. package/.output/server/chunks/build/{teams-D-Y5mzU7.mjs → teams-wM-MdLv9.mjs} +8 -8
  77. package/.output/server/chunks/build/{teams-D-Y5mzU7.mjs.map → teams-wM-MdLv9.mjs.map} +1 -1
  78. package/.output/server/chunks/build/types-D6J7slEa.mjs +1 -1
  79. package/.output/server/chunks/build/{useAgentHarnessOptions-CRyQYYY0.mjs → useAgentHarnessOptions-BnFCh23W.mjs} +2 -2
  80. package/.output/server/chunks/build/{useAgentHarnessOptions-CRyQYYY0.mjs.map → useAgentHarnessOptions-BnFCh23W.mjs.map} +1 -1
  81. package/.output/server/chunks/build/{useAgentTemplateActions-CaRsOBmB.mjs → useAgentTemplateActions-DsBRUQni.mjs} +2 -2
  82. package/.output/server/chunks/build/{useAgentTemplateActions-CaRsOBmB.mjs.map → useAgentTemplateActions-DsBRUQni.mjs.map} +1 -1
  83. package/.output/server/chunks/build/{useAgentTemplateForm-ChiIuPYr.mjs → useAgentTemplateForm-DzQ_t2Ue.mjs} +2 -2
  84. package/.output/server/chunks/build/{useAgentTemplateForm-ChiIuPYr.mjs.map → useAgentTemplateForm-DzQ_t2Ue.mjs.map} +1 -1
  85. package/.output/server/chunks/build/{useAgentTemplatesCatalog-Bf5hk6Jf.mjs → useAgentTemplatesCatalog-Q7LgG1Af.mjs} +2 -2
  86. package/.output/server/chunks/build/{useAgentTemplatesCatalog-Bf5hk6Jf.mjs.map → useAgentTemplatesCatalog-Q7LgG1Af.mjs.map} +1 -1
  87. package/.output/server/chunks/build/useDaqAddNode-kW7uTSMQ.mjs +1 -1
  88. package/.output/server/chunks/build/useDaqDetailNode-D_vhG0jF.mjs +1 -1
  89. package/.output/server/chunks/build/useDaqDetailParams-JfqHvTxr.mjs +1 -1
  90. package/.output/server/chunks/build/useDaqFilters-BUQtZ82a.mjs +1 -1
  91. package/.output/server/chunks/build/useDaqStream-wOxZcMDA.mjs +1 -1
  92. package/.output/server/chunks/build/useDaqTemplates-BqQRdrIm.mjs +1 -1
  93. package/.output/server/chunks/build/{useDashboardData-CNOY4Bi3.mjs → useDashboardData-DWJ6vHjm.mjs} +2 -2
  94. package/.output/server/chunks/build/{useDashboardData-CNOY4Bi3.mjs.map → useDashboardData-DWJ6vHjm.mjs.map} +1 -1
  95. package/.output/server/chunks/build/useDcwAddNode-C1HDP3yG.mjs +1 -1
  96. package/.output/server/chunks/build/useDcwStream-D04kCV3J.mjs +1 -1
  97. package/.output/server/chunks/build/{useTeamActions-C51ciLb0.mjs → useTeamActions-BOLQkYxg.mjs} +2 -2
  98. package/.output/server/chunks/build/{useTeamActions-C51ciLb0.mjs.map → useTeamActions-BOLQkYxg.mjs.map} +1 -1
  99. package/.output/server/chunks/build/{useTeamAddMemberDialog-DthpCMP8.mjs → useTeamAddMemberDialog-BCgrLPxI.mjs} +2 -2
  100. package/.output/server/chunks/build/{useTeamAddMemberDialog-DthpCMP8.mjs.map → useTeamAddMemberDialog-BCgrLPxI.mjs.map} +1 -1
  101. package/.output/server/chunks/build/{useTeamCreateDialog-Dc2KTwyg.mjs → useTeamCreateDialog-CJk40LqS.mjs} +2 -2
  102. package/.output/server/chunks/build/{useTeamCreateDialog-Dc2KTwyg.mjs.map → useTeamCreateDialog-CJk40LqS.mjs.map} +1 -1
  103. package/.output/server/chunks/build/{useTeamDeployDialog-CXpvPnJD.mjs → useTeamDeployDialog-49hdUXQP.mjs} +2 -2
  104. package/.output/server/chunks/build/{useTeamDeployDialog-CXpvPnJD.mjs.map → useTeamDeployDialog-49hdUXQP.mjs.map} +1 -1
  105. package/.output/server/chunks/build/{useTeamPluginDialog-DTs-7SSm.mjs → useTeamPluginDialog-Dh-QOoiU.mjs} +2 -2
  106. package/.output/server/chunks/build/{useTeamPluginDialog-DTs-7SSm.mjs.map → useTeamPluginDialog-Dh-QOoiU.mjs.map} +1 -1
  107. package/.output/server/chunks/build/{useTeamsCatalog-CcpetYyW.mjs → useTeamsCatalog-HBSyKt5P.mjs} +2 -2
  108. package/.output/server/chunks/build/{useTeamsCatalog-CcpetYyW.mjs.map → useTeamsCatalog-HBSyKt5P.mjs.map} +1 -1
  109. package/.output/server/chunks/build/{useWorkshopApi-CO3ophqt.mjs → useWorkshopApi-C9sTYu1F.mjs} +9 -1
  110. package/.output/server/chunks/build/useWorkshopApi-C9sTYu1F.mjs.map +1 -0
  111. package/.output/server/chunks/build/useWorkshopWs-Bm80bLn7.mjs.map +1 -1
  112. package/.output/server/chunks/routes/api/index.get.mjs +1 -1
  113. package/.output/server/chunks/routes/api/index.post.mjs +14 -3
  114. package/.output/server/chunks/routes/api/index.post.mjs.map +1 -1
  115. package/.output/server/chunks/routes/api/mcp/workshop.mjs +43 -14
  116. package/.output/server/chunks/routes/api/mcp/workshop.mjs.map +1 -1
  117. package/.output/server/chunks/routes/api/metrics.mjs +2 -0
  118. package/.output/server/chunks/routes/api/metrics.mjs.map +1 -1
  119. package/.output/server/chunks/routes/api/plugins/_name/_...path_.mjs +1 -1
  120. package/.output/server/chunks/routes/api/plugins/_name/_...path_.mjs.map +1 -1
  121. package/.output/server/chunks/routes/api/system/backup/list.get.mjs +47 -0
  122. package/.output/server/chunks/routes/api/system/backup/list.get.mjs.map +1 -0
  123. package/.output/server/chunks/routes/api/system/backup/run.post.mjs +35 -0
  124. package/.output/server/chunks/routes/api/system/backup/run.post.mjs.map +1 -0
  125. package/.output/server/chunks/routes/api/system/config-groups/_id_.delete.mjs +1 -1
  126. package/.output/server/chunks/routes/api/system/config-groups/_id_.patch.mjs +1 -1
  127. package/.output/server/chunks/routes/api/system/index.get.mjs +1 -1
  128. package/.output/server/chunks/routes/api/system/index.patch.mjs +15 -4
  129. package/.output/server/chunks/routes/api/system/index.patch.mjs.map +1 -1
  130. package/.output/server/chunks/routes/api/system/index.post.mjs +1 -1
  131. package/.output/server/chunks/routes/api/system/index2.get.mjs +1 -1
  132. package/.output/server/chunks/routes/api/system/monitor/terminal/ws.mjs +1 -1
  133. package/.output/server/chunks/routes/api/system/monitor/terminate.post.mjs +1 -1
  134. package/.output/server/chunks/routes/api/system/settings/events.get.mjs +1 -1
  135. package/.output/server/chunks/routes/api/system/settings/reset.post.mjs +15 -3
  136. package/.output/server/chunks/routes/api/system/settings/reset.post.mjs.map +1 -1
  137. package/.output/server/chunks/routes/api/system/timezone.get.mjs +1 -1
  138. package/.output/server/chunks/routes/api/users/_id_.delete.mjs +14 -3
  139. package/.output/server/chunks/routes/api/users/_id_.delete.mjs.map +1 -1
  140. package/.output/server/chunks/routes/api/users/_id_.get.mjs +1 -1
  141. package/.output/server/chunks/routes/api/users/_id_.put.mjs +14 -3
  142. package/.output/server/chunks/routes/api/users/_id_.put.mjs.map +1 -1
  143. package/.output/server/chunks/routes/api/users/index.get.mjs +1 -1
  144. package/.output/server/chunks/routes/api/users/index.post.mjs +1 -1
  145. package/.output/server/chunks/routes/api/users/login.post.mjs +3 -2
  146. package/.output/server/chunks/routes/api/users/login.post.mjs.map +1 -1
  147. package/.output/server/chunks/routes/api/users/logout.post.mjs +1 -1
  148. package/.output/server/chunks/routes/api/users/me.get.mjs +1 -1
  149. package/.output/server/chunks/routes/api/users/register.post.mjs +4 -1
  150. package/.output/server/chunks/routes/api/users/register.post.mjs.map +1 -1
  151. package/.output/server/chunks/routes/api/users/setup-status.get.mjs +1 -1
  152. package/.output/server/chunks/routes/api/users/tokens/_id/token.get.mjs +1 -1
  153. package/.output/server/chunks/routes/api/users/tokens/_id_.delete.mjs +1 -1
  154. package/.output/server/chunks/routes/api/users/tokens/_id_.patch.mjs +1 -1
  155. package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.get.mjs +1 -1
  156. package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.post.mjs +19 -15
  157. package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.post.mjs.map +1 -1
  158. package/.output/server/chunks/routes/api/workshop/a2a/send.post.mjs +1 -1
  159. package/.output/server/chunks/routes/api/workshop/agent-tools/approvals/_id/decide.post.mjs +1 -1
  160. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.delete.mjs +1 -1
  161. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.patch.mjs +1 -1
  162. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/grant.post.mjs +1 -1
  163. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/revoke.post.mjs +1 -1
  164. package/.output/server/chunks/routes/api/workshop/agent-tools/index.get.mjs +1 -1
  165. package/.output/server/chunks/routes/api/workshop/agent-tools/index.post.mjs +1 -1
  166. package/.output/server/chunks/routes/api/workshop/agent-tools/index2.get.mjs +1 -1
  167. package/.output/server/chunks/routes/api/workshop/agent-tools/invoke.post.mjs +1 -1
  168. package/.output/server/chunks/routes/api/workshop/agent-tools/list.get.mjs +1 -1
  169. package/.output/server/chunks/routes/api/workshop/agents/_id_.patch.mjs +1 -1
  170. package/.output/server/chunks/routes/api/workshop/agents/subscribe.post.mjs +1 -1
  171. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id/preview.get.mjs +1 -1
  172. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.delete.mjs +1 -1
  173. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.get.mjs +1 -1
  174. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.patch.mjs +1 -1
  175. package/.output/server/chunks/routes/api/workshop/aml/entities/prune.post.mjs +1 -1
  176. package/.output/server/chunks/routes/api/workshop/aml/env/recheck.post.mjs +1 -1
  177. package/.output/server/chunks/routes/api/workshop/aml/env/uv.post.mjs +1 -1
  178. package/.output/server/chunks/routes/api/workshop/aml/env/venv.post.mjs +1 -1
  179. package/.output/server/chunks/routes/api/workshop/aml/index.get.mjs +1 -1
  180. package/.output/server/chunks/routes/api/workshop/aml/index.post.mjs +1 -1
  181. package/.output/server/chunks/routes/api/workshop/aml/index2.post.mjs +1 -1
  182. package/.output/server/chunks/routes/api/workshop/aml/index3.get.mjs +1 -1
  183. package/.output/server/chunks/routes/api/workshop/aml/index3.post.mjs +1 -1
  184. package/.output/server/chunks/routes/api/workshop/aml/index4.get.mjs +1 -1
  185. package/.output/server/chunks/routes/api/workshop/aml/index5.get.mjs +1 -1
  186. package/.output/server/chunks/routes/api/workshop/aml/index6.get.mjs +1 -1
  187. package/.output/server/chunks/routes/api/workshop/aml/index7.get.mjs +1 -1
  188. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/cancel.post.mjs +1 -1
  189. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/logs.get.mjs +1 -1
  190. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/retry.post.mjs +1 -1
  191. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id_.delete.mjs +1 -1
  192. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id_.get.mjs +1 -1
  193. package/.output/server/chunks/routes/api/workshop/aml/models/_id/predict.post.mjs +1 -1
  194. package/.output/server/chunks/routes/api/workshop/aml/models/_id/promote.post.mjs +1 -1
  195. package/.output/server/chunks/routes/api/workshop/aml/models/_id_.delete.mjs +1 -1
  196. package/.output/server/chunks/routes/api/workshop/aml/models/_id_.patch.mjs +1 -1
  197. package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id/train.post.mjs +1 -1
  198. package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id_.delete.mjs +1 -1
  199. package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id_.patch.mjs +1 -1
  200. package/.output/server/chunks/routes/api/workshop/aml/twin/providers.get.mjs +1 -1
  201. package/.output/server/chunks/routes/api/workshop/approvals/_id/decide.post.mjs +1 -1
  202. package/.output/server/chunks/routes/api/workshop/assets/index.get.mjs +1 -1
  203. package/.output/server/chunks/routes/api/workshop/assets/index.post.mjs +1 -1
  204. package/.output/server/chunks/routes/api/workshop/assets/index2.post.mjs +1 -1
  205. package/.output/server/chunks/routes/api/workshop/audit.get.mjs +1 -1
  206. package/.output/server/chunks/routes/api/workshop/caller.mjs +1 -1
  207. package/.output/server/chunks/routes/api/workshop/channel-templates/_id/instantiate.post.mjs +8 -3
  208. package/.output/server/chunks/routes/api/workshop/channel-templates/_id/instantiate.post.mjs.map +1 -1
  209. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.patch.mjs +1 -1
  210. package/.output/server/chunks/routes/api/workshop/channel-templates/from-channel.post.mjs +1 -1
  211. package/.output/server/chunks/routes/api/workshop/channels/_id/activate.post.mjs +1 -1
  212. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.post.mjs +1 -1
  213. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/search.post.mjs +1 -1
  214. package/.output/server/chunks/routes/api/workshop/channels/_id/chat/index.get.mjs +1 -1
  215. package/.output/server/chunks/routes/api/workshop/channels/_id/chat/index.post.mjs +1 -1
  216. package/.output/server/chunks/routes/api/workshop/channels/_id/events.get.mjs +1 -1
  217. package/.output/server/chunks/routes/api/workshop/channels/_id/index.post.mjs +1 -1
  218. package/.output/server/chunks/routes/api/workshop/channels/_id/index.put.mjs +1 -1
  219. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.post.mjs +1 -1
  220. package/.output/server/chunks/routes/api/workshop/channels/_id/index3.post.mjs +1 -1
  221. package/.output/server/chunks/routes/api/workshop/channels/_id/index4.get.mjs +1 -1
  222. package/.output/server/chunks/routes/api/workshop/channels/_id/index4.post.mjs +1 -1
  223. package/.output/server/chunks/routes/api/workshop/channels/_id/index5.get.mjs +1 -1
  224. package/.output/server/chunks/routes/api/workshop/channels/_id/line.put.mjs +37 -0
  225. package/.output/server/chunks/routes/api/workshop/channels/_id/line.put.mjs.map +1 -0
  226. package/.output/server/chunks/routes/api/workshop/channels/_id/terminals.get.mjs +1 -1
  227. package/.output/server/chunks/routes/api/workshop/channels/_id/twin-profile.get.mjs +1 -1
  228. package/.output/server/chunks/routes/api/workshop/channels/_id/twin-profile.patch.mjs +1 -1
  229. package/.output/server/chunks/routes/api/workshop/channels/index.get.mjs +1 -1
  230. package/.output/server/chunks/routes/api/workshop/channels/index.patch.mjs +1 -1
  231. package/.output/server/chunks/routes/api/workshop/channels.post.mjs +4 -4
  232. package/.output/server/chunks/routes/api/workshop/daq/_id/bind.post.mjs +1 -1
  233. package/.output/server/chunks/routes/api/workshop/daq/_id/bindings.put.mjs +1 -1
  234. package/.output/server/chunks/routes/api/workshop/daq/_id/frames/content.get.mjs +1 -1
  235. package/.output/server/chunks/routes/api/workshop/daq/_id/frames.get.mjs +1 -1
  236. package/.output/server/chunks/routes/api/workshop/daq/_id/samples.get.mjs +1 -1
  237. package/.output/server/chunks/routes/api/workshop/daq/_id/test.post.mjs +1 -1
  238. package/.output/server/chunks/routes/api/workshop/daq/_id_.delete.mjs +1 -1
  239. package/.output/server/chunks/routes/api/workshop/daq/_id_.patch.mjs +1 -1
  240. package/.output/server/chunks/routes/api/workshop/daq/alarms/_id/ack.post.mjs +1 -1
  241. package/.output/server/chunks/routes/api/workshop/daq/alarms.get.mjs +1 -1
  242. package/.output/server/chunks/routes/api/workshop/daq/controller.post.mjs +1 -1
  243. package/.output/server/chunks/routes/api/workshop/daq/index.post.mjs +1 -1
  244. package/.output/server/chunks/routes/api/workshop/daq/infra/reconnect.post.mjs +1 -1
  245. package/.output/server/chunks/routes/api/workshop/daq/infra.get.mjs +1 -1
  246. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.delete.mjs +1 -1
  247. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.patch.mjs +1 -1
  248. package/.output/server/chunks/routes/api/workshop/daq/test-driver.post.mjs +1 -1
  249. package/.output/server/chunks/routes/api/workshop/dcw/_id/bind.post.mjs +1 -1
  250. package/.output/server/chunks/routes/api/workshop/dcw/_id/bindings.put.mjs +1 -1
  251. package/.output/server/chunks/routes/api/workshop/dcw/_id/param-ledger.get.mjs +1 -1
  252. package/.output/server/chunks/routes/api/workshop/dcw/_id/read.post.mjs +1 -1
  253. package/.output/server/chunks/routes/api/workshop/dcw/_id/test.post.mjs +1 -1
  254. package/.output/server/chunks/routes/api/workshop/dcw/_id/write.post.mjs +1 -1
  255. package/.output/server/chunks/routes/api/workshop/dcw/_id_.delete.mjs +1 -1
  256. package/.output/server/chunks/routes/api/workshop/dcw/_id_.patch.mjs +1 -1
  257. package/.output/server/chunks/routes/api/workshop/dcw/controller.post.mjs +1 -1
  258. package/.output/server/chunks/routes/api/workshop/dcw/index.get.mjs +1 -1
  259. package/.output/server/chunks/routes/api/workshop/dcw/index.post.mjs +1 -1
  260. package/.output/server/chunks/routes/api/workshop/dcw/index2.get.mjs +1 -1
  261. package/.output/server/chunks/routes/api/workshop/dcw/index2.post.mjs +1 -1
  262. package/.output/server/chunks/routes/api/workshop/dcw/index3.get.mjs +1 -1
  263. package/.output/server/chunks/routes/api/workshop/dcw/index3.post.mjs +1 -1
  264. package/.output/server/chunks/routes/api/workshop/dcw/index4.get.mjs +1 -1
  265. package/.output/server/chunks/routes/api/workshop/dcw/index4.post.mjs +1 -1
  266. package/.output/server/chunks/routes/api/workshop/dcw/index5.get.mjs +1 -1
  267. package/.output/server/chunks/routes/api/workshop/dcw/index5.post.mjs +1 -1
  268. package/.output/server/chunks/routes/api/workshop/dcw/index6.get.mjs +1 -1
  269. package/.output/server/chunks/routes/api/workshop/dcw/journal/node/_nodeId/rollback.post.mjs +1 -1
  270. package/.output/server/chunks/routes/api/workshop/dcw/line/query.get.mjs +6 -1
  271. package/.output/server/chunks/routes/api/workshop/dcw/line/query.get.mjs.map +1 -1
  272. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/start.post.mjs +1 -1
  273. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/stop.post.mjs +1 -1
  274. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.delete.mjs +1 -1
  275. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.patch.mjs +1 -1
  276. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/judge.post.mjs +1 -1
  277. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/rollback.post.mjs +1 -1
  278. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/series.get.mjs +1 -1
  279. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id_.get.mjs +1 -1
  280. package/.output/server/chunks/routes/api/workshop/dcw/params/_id/read.post.mjs +1 -1
  281. package/.output/server/chunks/routes/api/workshop/dcw/params/_id/write.post.mjs +1 -1
  282. package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.delete.mjs +1 -1
  283. package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.patch.mjs +1 -1
  284. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.delete.mjs +1 -1
  285. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.patch.mjs +1 -1
  286. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/apply.post.mjs +1 -1
  287. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/mark-good.post.mjs +1 -1
  288. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/revert.post.mjs +3 -3
  289. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/revert.post.mjs.map +1 -1
  290. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/rollback-good.post.mjs +1 -1
  291. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/versions.get.mjs +1 -1
  292. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.delete.mjs +1 -1
  293. package/.output/server/chunks/routes/api/workshop/dcw/recipes/index.patch.mjs +1 -1
  294. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/close.post.mjs +1 -1
  295. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/data.get.mjs +1 -1
  296. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/rollback.post.mjs +1 -1
  297. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.delete.mjs +1 -1
  298. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.patch.mjs +1 -1
  299. package/.output/server/chunks/routes/api/workshop/dcw/test-driver.post.mjs +1 -1
  300. package/.output/server/chunks/routes/api/workshop/device-twins/_id/control.post.mjs +1 -1
  301. package/.output/server/chunks/routes/api/workshop/device-twins/_id/telemetry.post.mjs +1 -1
  302. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.delete.mjs +1 -1
  303. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.patch.mjs +1 -1
  304. package/.output/server/chunks/routes/api/workshop/fs/dirs.get.mjs +14 -2
  305. package/.output/server/chunks/routes/api/workshop/fs/dirs.get.mjs.map +1 -1
  306. package/.output/server/chunks/routes/api/workshop/harnesses/_id/providers.get.mjs +1 -1
  307. package/.output/server/chunks/routes/api/workshop/harnesses.get.mjs +1 -1
  308. package/.output/server/chunks/routes/api/workshop/hitl/pending.get.mjs +1 -1
  309. package/.output/server/chunks/routes/api/workshop/hitl/respond.post.mjs +1 -1
  310. package/.output/server/chunks/routes/api/workshop/index.post.mjs +1 -1
  311. package/.output/server/chunks/routes/api/workshop/index.put.mjs +1 -1
  312. package/.output/server/chunks/routes/api/workshop/index10.get.mjs +1 -1
  313. package/.output/server/chunks/routes/api/workshop/index2.get.mjs +1 -1
  314. package/.output/server/chunks/routes/api/workshop/index2.post.mjs +1 -1
  315. package/.output/server/chunks/routes/api/workshop/index3.get.mjs +1 -1
  316. package/.output/server/chunks/routes/api/workshop/index3.post.mjs +1 -1
  317. package/.output/server/chunks/routes/api/workshop/index4.post.mjs +1 -1
  318. package/.output/server/chunks/routes/api/workshop/index5.get.mjs +1 -1
  319. package/.output/server/chunks/routes/api/workshop/index5.post.mjs +1 -1
  320. package/.output/server/chunks/routes/api/workshop/index6.get.mjs +1 -1
  321. package/.output/server/chunks/routes/api/workshop/index6.post.mjs +1 -1
  322. package/.output/server/chunks/routes/api/workshop/index7.get.mjs +1 -1
  323. package/.output/server/chunks/routes/api/workshop/index7.post.mjs +1 -1
  324. package/.output/server/chunks/routes/api/workshop/index8.get.mjs +1 -1
  325. package/.output/server/chunks/routes/api/workshop/index8.post.mjs +1 -1
  326. package/.output/server/chunks/routes/api/workshop/index9.get.mjs +3 -3
  327. package/.output/server/chunks/routes/api/workshop/index9.get.mjs.map +1 -1
  328. package/.output/server/chunks/routes/api/workshop/index9.post.mjs +1 -1
  329. package/.output/server/chunks/routes/api/workshop/notifications/read.post.mjs +1 -1
  330. package/.output/server/chunks/routes/api/workshop/plugins/_name/disable.post.mjs +1 -1
  331. package/.output/server/chunks/routes/api/workshop/plugins/_name/enable.post.mjs +1 -1
  332. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.delete.mjs +1 -1
  333. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.put.mjs +1 -1
  334. package/.output/server/chunks/routes/api/workshop/schedules/_id/runs.get.mjs +1 -1
  335. package/.output/server/chunks/routes/api/workshop/schedules/_id_.patch.mjs +1 -1
  336. package/.output/server/chunks/routes/api/workshop/tasks/_id/complete.post.mjs +1 -1
  337. package/.output/server/chunks/routes/api/workshop/tasks/_id/dispatch.post.mjs +1 -1
  338. package/.output/server/chunks/routes/api/workshop/tasks/_id/report.post.mjs +1 -1
  339. package/.output/server/chunks/routes/api/workshop/tasks/_id_.get.mjs +1 -1
  340. package/.output/server/chunks/routes/api/workshop/teams/_id/deploy.post.mjs +1 -1
  341. package/.output/server/chunks/routes/api/workshop/teams/_id/index.post.mjs +1 -1
  342. package/.output/server/chunks/routes/api/workshop/teams/_id/index.put.mjs +1 -1
  343. package/.output/server/chunks/routes/api/workshop/teams/_id/index2.get.mjs +1 -1
  344. package/.output/server/chunks/routes/api/workshop/teams/_id_.patch.mjs +1 -1
  345. package/.output/server/chunks/routes/api/workshop/users/register.post.mjs +4 -1
  346. package/.output/server/chunks/routes/api/workshop/users/register.post.mjs.map +1 -1
  347. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channel-templates/_tplId_.post.mjs +2 -2
  348. package/.output/server/chunks/routes/renderer.mjs +2 -2
  349. package/.output/server/chunks/virtual/entry.mjs +340 -52
  350. package/.output/server/chunks/virtual/precomputed.mjs +1 -1
  351. package/.output/server/package.json +1 -1
  352. package/README-zh.md +7 -3
  353. package/README.md +11 -5
  354. package/app/components/app-header/HitlBell.vue +9 -9
  355. package/app/components/dcw/DcwAddNodeModal.vue +3 -3
  356. package/app/components/dcw/DcwNodesTable.vue +4 -4
  357. package/app/components/dcw/DcwRecipeEditModal.vue +2 -2
  358. package/app/components/workshop/ChatMemberPanel.vue +39 -38
  359. package/app/components/workshop/ChatTimeline.vue +33 -24
  360. package/app/components/workshop/Composer.vue +7 -7
  361. package/app/components/workshop/NotificationCenter.vue +22 -13
  362. package/app/components/workshop/PluginSlot.vue +1 -1
  363. package/app/components/workshop/TaskInspectorDrawer.vue +5 -5
  364. package/app/components/workshop/blocks/ClusterTool.vue +1 -1
  365. package/app/components/workshop/composer/ComposerToolbar.vue +2 -2
  366. package/app/components/workshop/composer/MentionMenu.vue +1 -1
  367. package/app/components/workshop/composer/ReplyChip.vue +2 -2
  368. package/app/components/workshop/composer/StatusChip.vue +7 -7
  369. package/app/components/workshop/console/LineOperationsPanel.vue +15 -14
  370. package/app/components/workshop/lanes/LaneHeader.vue +5 -3
  371. package/app/components/workshop/session-list/ChannelSettingsModal.vue +43 -1
  372. package/app/composables/useCodeCopy.ts +16 -2
  373. package/app/composables/workshop/useWorkshopApi.ts +7 -0
  374. package/app/stores/workshop/notifications.ts +43 -17
  375. package/docs/cli.en.md +1 -1
  376. package/i18n/dicts/_en.json +1551 -1557
  377. package/i18n/dicts/_en2.json +300 -300
  378. package/i18n/dicts/_en4.json +114 -115
  379. package/i18n/dicts/agentLanesView.json +61 -57
  380. package/i18n/dicts/appHeader.json +17 -7
  381. package/i18n/dicts/channelSessionList.json +51 -48
  382. package/i18n/dicts/chat.json +79 -0
  383. package/i18n/dicts/clusterTool.json +4 -3
  384. package/i18n/dicts/composer.json +38 -38
  385. package/i18n/dicts/dcwDetail.json +219 -209
  386. package/i18n/dicts/lineOps.json +14 -0
  387. package/i18n/dicts/multiChannelView.json +13 -13
  388. package/i18n/dicts/notifications.json +13 -0
  389. package/i18n/dicts/taskInspectorDrawer.json +25 -19
  390. package/i18n/locales/en.ts +152 -8
  391. package/i18n/locales/zh-CN.ts +152 -8
  392. package/package.json +1 -1
  393. package/public/robots.txt +3 -0
  394. package/server/api/mcp/workshop.ts +8 -1
  395. package/server/api/metrics.ts +4 -1
  396. package/server/api/plugins/[name]/[...path].ts +4 -3
  397. package/server/api/system/backup/list.get.ts +32 -0
  398. package/server/api/system/backup/run.post.ts +21 -0
  399. package/server/api/system/settings/index.patch.ts +12 -2
  400. package/server/api/system/settings/reset.post.ts +11 -2
  401. package/server/api/users/[id].delete.ts +9 -2
  402. package/server/api/users/[id].put.ts +9 -2
  403. package/server/api/users/index.post.ts +9 -2
  404. package/server/api/users/login.post.ts +3 -3
  405. package/server/api/users/register.post.ts +11 -1
  406. package/server/api/workshop/a2a/[agentId]/rpc/index.post.ts +23 -13
  407. package/server/api/workshop/channel-templates/[id]/instantiate.post.ts +6 -0
  408. package/server/api/workshop/channels/[id]/line.put.ts +30 -0
  409. package/server/api/workshop/dcw/line/query.get.ts +6 -0
  410. package/server/api/workshop/dcw/recipes/[id]/revert.post.ts +3 -2
  411. package/server/api/workshop/fs/dirs.get.ts +19 -1
  412. package/server/api/workshop/ops-logs/index.get.ts +3 -2
  413. package/server/api/workshop/users/register.post.ts +7 -0
  414. package/server/mcp/workshop-server.ts +36 -13
  415. package/server/middleware/00-security-headers.ts +38 -0
  416. package/server/middleware/01-rate-guard.ts +101 -0
  417. package/server/plugins/backup.ts +56 -1
  418. package/server/plugins-builtin/diag-bridge/host/plugin.mjs +18 -11
  419. package/server/repositories/user.repository.ts +10 -5
  420. package/server/services/user.service.ts +24 -1
  421. package/server/services/workshop/agents/host-tool-bridge/dispatch.ts +1 -1
  422. package/server/services/workshop/agents/host-tool-bridge/tools/industrial.ts +4 -2
  423. package/server/services/workshop/agents/industrial/index.ts +1 -1
  424. package/server/services/workshop/agents/industrial/ops-tools.ts +168 -26
  425. package/server/services/workshop/agents/tool-classes.ts +2 -0
  426. package/server/services/workshop/aml/dataset-builder.ts +4 -2
  427. package/server/services/workshop/aml/job-orchestrator/process.ts +1 -0
  428. package/server/services/workshop/aml/job-orchestrator/shared.ts +2 -0
  429. package/server/services/workshop/aml/job-orchestrator/start-job.ts +5 -2
  430. package/server/services/workshop/db/channel.repo.ts +11 -1
  431. package/server/services/workshop/db/database/migrations.ts +2 -0
  432. package/server/services/workshop/db/database/rows.ts +2 -0
  433. package/server/services/workshop/db/database/seed.ts +19 -9
  434. package/server/services/workshop/dcw/dcw-controller/recipes.ts +60 -4
  435. package/server/services/workshop/dcw/dcw-controller/write.ts +35 -6
  436. package/server/services/workshop/dcw/dcw-recipe.repo.ts +4 -3
  437. package/server/services/workshop/dcw/param-map.repo.ts +3 -0
  438. package/server/services/workshop/plugins/host/init.mjs +9 -1
  439. package/server/services/workshop/plugins/host/load.mjs +2 -2
  440. package/server/services/workshop/runtime/manager/admin-channel.ts +27 -1
  441. package/server/services/workshop/runtime/manager/channel-templates.ts +5 -4
  442. package/server/services/workshop/runtime/manager/runtime-wiring.ts +17 -1
  443. package/shared/config/schema.json +2 -0
  444. package/.output/public/_nuxt/4wrEQ3np2.js +0 -21
  445. package/.output/public/_nuxt/CGQvF-Gg.js +0 -14
  446. package/.output/public/_nuxt/CcGuXiOa.js +0 -1
  447. package/.output/public/_nuxt/D0SNhlnt.js +0 -1
  448. package/.output/public/_nuxt/DnH9SRMW2.js +0 -1
  449. package/.output/public/_nuxt/ON2x-t6n.js +0 -1
  450. package/.output/public/_nuxt/PluginSlot.DmjNbrcX.css +0 -1
  451. package/.output/public/_nuxt/_wsId_.DkrQkT6r.css +0 -1
  452. package/.output/public/_nuxt/builds/meta/c64014ca-3595-4b7a-a5ca-055687c83ba2.json +0 -1
  453. package/.output/server/chunks/build/_id_-BUpQSlzo.mjs.map +0 -1
  454. package/.output/server/chunks/build/useWorkshopApi-CO3ophqt.mjs.map +0 -1
  455. package/scripts/.chk-tok +0 -1
  456. package/scripts/.retrain-body.json +0 -1
  457. package/scripts/.retrain3-body.json +0 -1
  458. package/scripts/.rt-tok +0 -1
  459. package/scripts/.rt3-tok +0 -1
@@ -17,6 +17,8 @@ export default {
17
17
  delete: 'Delete',
18
18
  status: 'Status',
19
19
  all: 'All',
20
+ copy: 'Copy',
21
+ copied: 'Copied',
20
22
  },
21
23
  menu: {
22
24
  system: 'AgentWorkShop',
@@ -296,6 +298,8 @@ export default {
296
298
  security: {
297
299
  hitlTimeoutMs: 'HITL approval timeout (ms)',
298
300
  approvalGate: 'Dual approval for high-risk ops',
301
+ allowRegistration: 'Open self-service registration',
302
+ hstsEnabled: 'Send HSTS header',
299
303
  },
300
304
  server: {
301
305
  host: 'Listen address',
@@ -1159,6 +1163,16 @@ export default {
1159
1163
  k13awowo134: 'Process range (min/max) is required',
1160
1164
  k1b6qe0r135: 'A recipe is required before starting: pick a product and a recipe (the recipe must contain process parameters)',
1161
1165
  kszv5sq136: 'No matching data in the window (check product/recipe/time range; only samples from running lines carry the line identity)',
1166
+ stepLimitLabel: 'Exploration per-step limit',
1167
+ stepLimitUnit: 'engineering units',
1168
+ stepLimitPlaceholder: 'Leave empty for the node default (2% of range)',
1169
+ stepLimitHint: 'Maximum change per agent write; exploration writes are rejected when no finite value is set.',
1170
+ thStepLimit: 'Step limit',
1171
+ stepInputTitle: 'Live control of the per-step max change; leave empty to disable exploration writes',
1172
+ stepCurrent: 'Current Δ≤{p0}',
1173
+ stepUnset: 'unset',
1174
+ recipeStepLimitLabel: 'Recipe per-step limit Δ≤',
1175
+ recipeStepLimitPlaceholder: 'Follow node default',
1162
1176
  },
1163
1177
  teams: {
1164
1178
  selectChannel: 'Select a target channel',
@@ -1448,6 +1462,10 @@ export default {
1448
1462
  kfvflle033: 'user edits member info / scenario prompt',
1449
1463
  k13xo8sz034: 'Select an agent template to clone',
1450
1464
  k1tjd5ab035: 'Select an AgentTeam to deploy',
1465
+ supervisionWatchdogTitle: 'Watchdog observation threshold triggered ({p0}); this is an observation signal, not a cancel',
1466
+ supervisionRunningTitle: 'Supervision round in progress (attempt={p0}, tick={p1})',
1467
+ supervisionDecisionText: 'Decision {p0}',
1468
+ supervisionDecisionTitle: 'Last lead decision: {p0} ({p1})',
1451
1469
  },
1452
1470
  artifactCard: {
1453
1471
  empty: '(empty)',
@@ -1510,6 +1528,9 @@ export default {
1510
1528
  k1098zie005: 'The working-scenario spec shared by all agents of this channel, injected into every harness together with the system design handbook… e.g. all deliverables must include a Chinese summary; code changes need a plan first; end replies with a [DONE] marker',
1511
1529
  kmgv4h5006: 'Working directory (team workspace mount point)',
1512
1530
  k1i8q46x007: 'Scenario prompt (after editing, member runtimes are recycled and re-assembled with the new scenario)',
1531
+ bindLineLabel: 'Bind line (read-only grant)',
1532
+ bindLinePlaceholder: 'Pick a line to bind (clear to unbind)',
1533
+ bindLineHint: 'Bound members can read the line ops logs, recipe history and live status without node bindings; writes still require node authorization.',
1513
1534
  ku3ugac008: 'The working-scenario spec shared by all agents of this channel…',
1514
1535
  k67dzev009: 'Working directory (agents\' cwd; omp subprocesses restart with the new directory after editing)',
1515
1536
  k6kpql010: 'Save as Channel Template',
@@ -1545,6 +1566,112 @@ export default {
1545
1566
  kyh87lw001: 'Deliverable body matches the reply above',
1546
1567
  k49les002: 'Hide',
1547
1568
  },
1569
+ chat: {
1570
+ title: 'Group chat',
1571
+ messageCount: '{p0} msgs',
1572
+ refreshTitle: 'Refresh members and settings',
1573
+ refresh: 'Refresh',
1574
+ join: 'Join channel',
1575
+ notMemberHint: 'Not a member — owner invitation required or the channel is private',
1576
+ privateHint: 'This channel is private or group chat is disabled — owner invitation required',
1577
+ pendingHint: 'Join request pending owner approval',
1578
+ leave: 'Leave channel',
1579
+ leaveConfirm: 'Leaving immediately revokes read, post, approval and notification catch-up access. Leave?',
1580
+ ownerHint: 'You are the owner (cannot leave; transfer ownership or delete the channel instead)',
1581
+ approve: 'Approve',
1582
+ removeConfirm: 'Removing this member immediately revokes their chat and approval access. Remove?',
1583
+ rosterHidden: 'Roster not visible (non-member)',
1584
+ settingsTitle: 'Chat settings',
1585
+ visibilityLabel: 'Visibility',
1586
+ visibilityPrivate: 'Private (members only)',
1587
+ visibilityPublic: 'Public (discoverable by signed-in users)',
1588
+ joinPolicyLabel: 'Join policy',
1589
+ joinPolicyOwnerApprove: 'Owner approval required',
1590
+ joinPolicyOpen: 'Open to join',
1591
+ approvalPolicyLabel: 'Approval policy',
1592
+ approvalOwnerOnly: 'Only the owner decides',
1593
+ approvalAnyMember: 'Any member decides',
1594
+ chatEnabledLabel: 'Enable group chat',
1595
+ saveSettings: 'Save settings',
1596
+ statusActive: 'Active',
1597
+ statusPending: 'Pending',
1598
+ statusLeft: 'Left',
1599
+ statusRemoved: 'Removed',
1600
+ joinedPending: 'Join request submitted — waiting for owner approval',
1601
+ joinedOk: 'Joined the channel',
1602
+ errChatDisabled: 'Group chat is disabled for this channel',
1603
+ errChannelPrivate: 'This channel is private — an owner invitation is required',
1604
+ leftOk: 'You have left the channel',
1605
+ errOwnerCannotLeave: 'The owner cannot leave — transfer ownership first',
1606
+ approvedOk: 'Join request approved',
1607
+ removedOk: 'Member removed',
1608
+ settingsSaved: 'Chat settings saved',
1609
+ settingsConflict: 'Channel settings were changed by someone else — refresh and retry',
1610
+ avatarHuman: 'U',
1611
+ earlierMessage: 'Earlier message',
1612
+ backToLatest: 'Back to latest',
1613
+ latest: 'Latest',
1614
+ loading: 'Loading…',
1615
+ loadEarlier: 'Load earlier messages',
1616
+ emptyTitle: 'No group chat messages yet',
1617
+ emptyHint: 'Plain messages only go to the group (0 agent runs); {\'@\'} mention an agent to trigger a run, or {\'@\'} a member for a direct notification.',
1618
+ roleUser: 'User',
1619
+ roleSystem: 'System',
1620
+ replyTitle: 'Reply quoting this message',
1621
+ reply: 'Reply',
1622
+ mentionAgentTitle: 'Click to open this agent',
1623
+ mentionMemberTitle: 'Mentioned member (does not trigger an agent)',
1624
+ answeredFrom: 'Answering {p0}',
1625
+ askedBy: '· asked by {p0}',
1626
+ deliveryPending: 'Pending',
1627
+ deliveryDelivered: 'Delivered',
1628
+ deliveryConsumed: 'Consumed',
1629
+ deliveryFailed: 'Delivery failed',
1630
+ deliveryCancelled: 'Cancelled',
1631
+ toolbarChatTitle: 'Group chat: only explicit {\'@\'}agent mentions trigger a run',
1632
+ reachAgentsTitle: 'Only explicit {\'@\'}agent mentions trigger a run',
1633
+ reachAgentsText: '{\'@\'}{p0} · will trigger {p1} agent run(s)',
1634
+ reachNoAgentTitle: 'No {\'@\'}agent: the message only goes to the group, no agent runs',
1635
+ reachNoAgentText: 'Group only · 0 agent runs',
1636
+ notifyMembersSuffix: ' will receive a direct notification',
1637
+ mentionHint: 'Type {\'@\'} to mention members · Enter to send',
1638
+ cancelReply: 'Cancel reply',
1639
+ unresolvedMentions: 'Unrecognized {\'@\'}: {p0} (not in this channel, not delivered)',
1640
+ sentToChat: 'Sent to the group · {p0} agent(s) received it',
1641
+ sentToChatNoAgent: 'Sent to the group (no {\'@\'}agent, no agent run)',
1642
+ composerChatDisabled: 'Group chat is disabled for this channel — ask the owner to enable it in the members panel and retry',
1643
+ composerNotMember: 'You are not a member of this channel yet — join via the members panel',
1644
+ composerPlaceholder: 'Send to group chat… {\'@\'} mention an agent (triggers a run) or a member (notification only)',
1645
+ blockChatDisabled: 'Group chat is disabled for this channel (the owner can enable it in the members panel)',
1646
+ blockNotMember: 'You are not a member yet — join via the members panel to post',
1647
+ },
1648
+ notifications: {
1649
+ bellTitle: 'My notifications (mentions / agent replies / approvals)',
1650
+ title: 'My notifications',
1651
+ unreadCount: '{p0} unread',
1652
+ markAllRead: 'Mark all read',
1653
+ markReadFailed: 'Failed to mark as read',
1654
+ empty: 'No notifications yet — mentions, agent replies and approval requests will show up here',
1655
+ typeMention: 'Mention',
1656
+ typeAgentReply: 'Agent reply',
1657
+ typeHitlRequest: 'Approval needed',
1658
+ typeHitlResolved: 'Approval result',
1659
+ typeMember: 'Membership change',
1660
+ },
1661
+ lineOps: {
1662
+ panelAria: 'Line operations panel',
1663
+ title: 'Line Operations',
1664
+ statDcw: 'Write control',
1665
+ statDaq: 'Acquisition',
1666
+ statAml: 'Training',
1667
+ statSafe: 'Blocked',
1668
+ filterAria: 'Operations filter',
1669
+ filterDaq: 'Fetch',
1670
+ filterTwin: 'Twin',
1671
+ filterSafety: 'Safety',
1672
+ empty: 'Waiting for line operations events',
1673
+ systemName: 'System',
1674
+ },
1548
1675
  clusterError: {
1549
1676
  showAll: 'All {p0}',
1550
1677
  k40p82001: 'Collapse',
@@ -1608,6 +1735,7 @@ export default {
1608
1735
  clusterTool: {
1609
1736
  expandAll: 'Expand all {p0} calls',
1610
1737
  k40p82001: 'Collapse',
1738
+ kindIndustrial: 'Industrial',
1611
1739
  },
1612
1740
  commandPalette: {
1613
1741
  gotoTeams: 'Go to: AgentTeam groups',
@@ -1631,14 +1759,14 @@ export default {
1631
1759
  },
1632
1760
  composer: {
1633
1761
  loopIntervalRange: 'Loop interval must be between 1 and 86400 seconds',
1634
- defaultLeadTitle: 'No {\'@\'} target: tasks route through lead scheduling; {\'@\'} a member to send directly',
1635
- chipHint: 'Type {\'@\'} to mention members · ⌘/Ctrl+Enter to send',
1762
+ defaultLeadTitle: 'No {\'{\'@\'}\'} target: tasks route through lead scheduling; {\'{\'@\'}\'} a member to send directly',
1763
+ chipHint: 'Type {\'{\'@\'}\'} to mention members · ⌘/Ctrl+Enter to send',
1636
1764
  seconds: 's',
1637
1765
  sendTitle: 'Send (⌘/Ctrl+Enter)',
1638
- kl3604i033: 'Direct to {\'@\'}{p0}',
1766
+ kl3604i033: 'Direct to {\'{\'@\'}\'}{p0}',
1639
1767
  k1cxjc4m034: 'Live Injection',
1640
- k1d2idgj035: 'Task dispatched → {\'@\'}{p0} ({p1})',
1641
- k1wk4bf036: 'Message sent to {\'@\'}{p0} ({p1})',
1768
+ k1d2idgj035: 'Task dispatched → {\'{\'@\'}\'}{p0} ({p1})',
1769
+ k1wk4bf036: 'Message sent to {\'{\'@\'}\'}{p0} ({p1})',
1642
1770
  k2z0fsx032: ' · direct',
1643
1771
  k1b38y2b001: 'Unlimited',
1644
1772
  k1jqqvhe002: 'HITL live injection: when the target is running, inject into its current turn directly (visible in the same turn)',
@@ -1655,7 +1783,7 @@ export default {
1655
1783
  k1bosqfv013: 'Live inject',
1656
1784
  kqdhdlq014: 'Task title is required',
1657
1785
  k1l36qf9015: 'Max runs must be 1–10000; empty means unlimited',
1658
- k1bw65is016: 'Select a target agent ({\'@\'} mention available)',
1786
+ k1bw65is016: 'Select a target agent ({\'{\'@\'}\'} mention available)',
1659
1787
  k1ww0ftm017: 'Running · the task joins its mailbox queue',
1660
1788
  k9eq10w018: 'Target busy: the new task is delivered to its mailbox and handled FIFO after the current turn',
1661
1789
  kbhz1rp019: 'Stopped · the task is queued and runs after wake-up',
@@ -1669,8 +1797,8 @@ export default {
1669
1797
  kmf7lcc027: 'Target runtime stopped: the message is safely queued and processed after re-enabling',
1670
1798
  k1tet5df028: 'Idle · a turn starts immediately to handle it',
1671
1799
  kn600in029: 'Target idle: processing starts right after delivery',
1672
- k2h5jwc030: 'Type a task (first line = title, {\'@\'} to target a member, defaults to lead)… ⌘/Ctrl+Enter to submit',
1673
- k15mwzt7031: 'Type a message/notice ({\'@\'} to target a member, defaults to lead)… ⌘/Ctrl+Enter to send',
1800
+ k2h5jwc030: 'Type a task (first line = title, {\'{\'@\'}\'} to target a member, defaults to lead)… ⌘/Ctrl+Enter to submit',
1801
+ k15mwzt7031: 'Type a message/notice ({\'{\'@\'}\'} to target a member, defaults to lead)… ⌘/Ctrl+Enter to send',
1674
1802
  },
1675
1803
  deviceTwinPanel: {
1676
1804
  armDelete: 'Click again to confirm deleting this device instance',
@@ -1839,6 +1967,12 @@ export default {
1839
1967
  k401n2012: 'none)',
1840
1968
  k1xj595a013: 'Cancellation requested',
1841
1969
  ke7bh8u014: 'Re-dispatched for execution',
1970
+ timedOut: 'Timed out',
1971
+ remainingMinutes: 'About {p0} min left',
1972
+ deadlineAt: 'Due {p0}',
1973
+ cancelWithChildren: 'This also stops {p0} active descendant tasks; completed results are kept. Continue?',
1974
+ cancelConfirm: 'Cancel this task?',
1975
+ childrenStats: 'Descendants {p0} · active {p1} · cancelled {p2}',
1842
1976
  },
1843
1977
  townView: {
1844
1978
  saveLayoutTip: 'Write all devices\' position/rotation/scale to the database',
@@ -2220,6 +2354,16 @@ export default {
2220
2354
  hitlKindDsh: 'dsh permission',
2221
2355
  hitlApprove: 'Approve',
2222
2356
  hitlReject: 'Reject',
2357
+ hitlReqQuestion: 'Question',
2358
+ hitlReqApproval: 'Approval',
2359
+ hitlPolicy: 'Policy: {p0}',
2360
+ hitlEngineNote: 'This item must be handled in its engine UI',
2361
+ hitlPermsLoading: 'Loading approval permissions…',
2362
+ hitlNoPerm: 'No approval permission',
2363
+ hitlAnswerPlaceholder: 'Type your answer',
2364
+ hitlSupplementPlaceholder: 'Additional notes (optional)',
2365
+ hitlSubmitAnswer: 'Submit answer',
2366
+ hitlCancelRequest: 'Cancel request',
2223
2367
  },
2224
2368
  ompTerminalPanel: {
2225
2369
  switchTarget: '── Switch target · {p0} ──',
@@ -17,6 +17,8 @@ export default {
17
17
  delete: '删除',
18
18
  status: '状态',
19
19
  all: '全部',
20
+ copy: '复制',
21
+ copied: '已复制',
20
22
  },
21
23
  menu: {
22
24
  system: 'AgentWorkShop',
@@ -296,6 +298,8 @@ export default {
296
298
  security: {
297
299
  hitlTimeoutMs: 'HITL 审批超时(ms)',
298
300
  approvalGate: '高危操作双人复核',
301
+ allowRegistration: '开放自助注册',
302
+ hstsEnabled: '下发 HSTS 头',
299
303
  },
300
304
  server: {
301
305
  host: '监听地址',
@@ -1159,6 +1163,16 @@ export default {
1159
1163
  k13awowo134: '工艺量程(min/max)必填',
1160
1164
  k1b6qe0r135: '开跑前必须先设定配方:请选择产品与配方(配方需含工艺参数)',
1161
1165
  kszv5sq136: '窗口内无匹配数据(检查产品/配方/时间范围;仅产线运行中的样本带产线标识)',
1166
+ stepLimitLabel: '探索阶段单步上限',
1167
+ stepLimitUnit: '工程量',
1168
+ stepLimitPlaceholder: '留空:按节点量程 2% 默认值',
1169
+ stepLimitHint: 'Agent 每次写入的最大变化量;无有限值时探索写入会被拒绝。',
1170
+ thStepLimit: '探索步长',
1171
+ stepInputTitle: '在线控制单步最大变化量;留空将关闭探索写入',
1172
+ stepCurrent: '当前 Δ≤{p0}',
1173
+ stepUnset: '未配置',
1174
+ recipeStepLimitLabel: 'Recipe 单步上限 Δ≤',
1175
+ recipeStepLimitPlaceholder: '跟随节点默认',
1162
1176
  },
1163
1177
  teams: {
1164
1178
  selectChannel: '选择目标 Channel',
@@ -1448,6 +1462,10 @@ export default {
1448
1462
  kfvflle033: 'user 编辑成员信息/场景提示词',
1449
1463
  k13xo8sz034: '请选择要克隆的 Agent 模板',
1450
1464
  k1tjd5ab035: '请选择要部署的 AgentTeam',
1465
+ supervisionWatchdogTitle: '监督观察阈值已触发({p0});这是观察信号,不是取消',
1466
+ supervisionRunningTitle: '监督回合进行中(attempt={p0},tick={p1})',
1467
+ supervisionDecisionText: '决策 {p0}',
1468
+ supervisionDecisionTitle: 'Lead 最后决策:{p0}({p1})',
1451
1469
  },
1452
1470
  artifactCard: {
1453
1471
  empty: '(空)',
@@ -1510,6 +1528,9 @@ export default {
1510
1528
  k1098zie005: '该 channel 全部 Agent 共享的作业场景规范,与系统设计手册组合注入每个 harness……例如:所有产出必须附中文摘要;代码修改需先列计划再动手;回复末尾附 [DONE] 标记',
1511
1529
  kmgv4h5006: '工作目录(团队作业挂载点)',
1512
1530
  k1i8q46x007: '作业场景 Prompt(修改后成员运行时自动回收,按新场景重装配)',
1531
+ bindLineLabel: '绑定产线(只读授权)',
1532
+ bindLinePlaceholder: '选择要绑定的产线(可清除=解绑)',
1533
+ bindLineHint: '绑定后频道成员无需节点绑定即可读取该产线的运维日志、配方历史与实时状态;参数下发等写操作仍需节点授权。',
1513
1534
  ku3ugac008: '该 channel 全部 Agent 共享的作业场景规范……',
1514
1535
  k67dzev009: '工作目录(Agent 作业 cwd;修改后 omp 子进程按新目录重启)',
1515
1536
  k6kpql010: '保存为 Channel 模板',
@@ -1545,6 +1566,112 @@ export default {
1545
1566
  kyh87lw001: '交付物正文与上方回复一致',
1546
1567
  k49les002: '隐藏',
1547
1568
  },
1569
+ chat: {
1570
+ title: '群聊',
1571
+ messageCount: '{p0} 条',
1572
+ refreshTitle: '刷新成员与设置',
1573
+ refresh: '刷新',
1574
+ join: '加入群聊',
1575
+ notMemberHint: '未加入群聊 —— 需 owner 邀请或 Channel 未公开',
1576
+ privateHint: '该 Channel 未公开或未开启群聊 —— 需 owner 邀请',
1577
+ pendingHint: '加入申请待 owner 批准',
1578
+ leave: '退出群聊',
1579
+ leaveConfirm: '退出群聊后将立即失去读、发言、审批与通知补拉权限,确认退出?',
1580
+ ownerHint: '你是 owner(不可退出,可转移 owner 或删除 Channel)',
1581
+ approve: '批准',
1582
+ removeConfirm: '移除该成员后其立即失去群聊与审批权限,确认?',
1583
+ rosterHidden: '名册不可见(非成员)',
1584
+ settingsTitle: '群聊设置',
1585
+ visibilityLabel: '可见性',
1586
+ visibilityPrivate: '私有(仅成员可见)',
1587
+ visibilityPublic: '公开(登录用户可发现)',
1588
+ joinPolicyLabel: '加入策略',
1589
+ joinPolicyOwnerApprove: '需 owner 批准',
1590
+ joinPolicyOpen: '开放加入',
1591
+ approvalPolicyLabel: '审批策略',
1592
+ approvalOwnerOnly: '仅 owner 可决策',
1593
+ approvalAnyMember: '任一成员可决策',
1594
+ chatEnabledLabel: '开启群聊',
1595
+ saveSettings: '保存设置',
1596
+ statusActive: '在群',
1597
+ statusPending: '待批准',
1598
+ statusLeft: '已退出',
1599
+ statusRemoved: '已移除',
1600
+ joinedPending: '已提交加入申请,等待 owner 批准',
1601
+ joinedOk: '已加入群聊',
1602
+ errChatDisabled: '该 Channel 未开启群聊',
1603
+ errChannelPrivate: '该 Channel 未公开,需 owner 邀请',
1604
+ leftOk: '已退出群聊',
1605
+ errOwnerCannotLeave: 'owner 不能退出群聊,请先转移 owner',
1606
+ approvedOk: '已批准加入',
1607
+ removedOk: '已移除成员',
1608
+ settingsSaved: '群聊设置已保存',
1609
+ settingsConflict: 'Channel 设置已被他人修改,请刷新后重试',
1610
+ avatarHuman: '人',
1611
+ earlierMessage: '更早的消息',
1612
+ backToLatest: '回到最新',
1613
+ latest: '最新',
1614
+ loading: '加载中…',
1615
+ loadEarlier: '加载更早的消息',
1616
+ emptyTitle: '还没有群聊消息',
1617
+ emptyHint: '直接发言只进群聊(0 次 Agent 执行);输入 {\'@\'} 提及 Agent 才会触发执行,{\'@\'} 成员只发定向通知。',
1618
+ roleUser: '用户',
1619
+ roleSystem: '系统',
1620
+ replyTitle: '引用这条消息回复',
1621
+ reply: '回复',
1622
+ mentionAgentTitle: '点击查看该 Agent',
1623
+ mentionMemberTitle: '被 {\'@\'} 的成员(不触发 Agent)',
1624
+ answeredFrom: '回答自 {p0}',
1625
+ askedBy: '· 提问者 {p0}',
1626
+ deliveryPending: '待投递',
1627
+ deliveryDelivered: '已入信箱',
1628
+ deliveryConsumed: '已被消费',
1629
+ deliveryFailed: '投递失败',
1630
+ deliveryCancelled: '已取消',
1631
+ toolbarChatTitle: '群聊:仅显式 {\'@\'}Agent 才触发执行',
1632
+ reachAgentsTitle: '仅显式 {\'@\'}Agent 触发执行',
1633
+ reachAgentsText: '{\'@\'}{p0} · 将触发 {p1} 次 Agent 执行',
1634
+ reachNoAgentTitle: '未 {\'@\'}Agent:消息只进群聊,不触发任何 Agent',
1635
+ reachNoAgentText: '仅群聊 · 0 次 Agent 执行',
1636
+ notifyMembersSuffix: ' 将收到定向通知',
1637
+ mentionHint: '输入 {\'@\'} 提及成员 · Enter 发送',
1638
+ cancelReply: '取消回复',
1639
+ unresolvedMentions: '未识别的 {\'@\'}: {p0}(不在本群成员内,未投递)',
1640
+ sentToChat: '已发到群聊 · {p0} 个 Agent 已收到投递',
1641
+ sentToChatNoAgent: '已发到群聊(未 {\'@\'}Agent,无 Agent 执行)',
1642
+ composerChatDisabled: '该 Channel 未开启群聊 —— 请 owner 在右侧成员面板开启后重试',
1643
+ composerNotMember: '你还不是该 Channel 的群成员 —— 请在右侧成员面板加入群聊',
1644
+ composerPlaceholder: '发送到群聊… {\'@\'} 提及 Agent(触发执行)或成员(仅通知)',
1645
+ blockChatDisabled: '该 Channel 未开启群聊(owner 可在右侧成员面板开启)',
1646
+ blockNotMember: '你还不是群成员 —— 请在右侧成员面板加入群聊后发言',
1647
+ },
1648
+ notifications: {
1649
+ bellTitle: '我的通知({\'@\'} 提及 / Agent 回复 / 审批)',
1650
+ title: '我的通知',
1651
+ unreadCount: '{p0} 未读',
1652
+ markAllRead: '全部已读',
1653
+ markReadFailed: '标记已读失败',
1654
+ empty: '暂无通知 —— 被 {\'@\'} 、收到 Agent 回复或审批请求时会出现在这里',
1655
+ typeMention: '{\'@\'} 提及',
1656
+ typeAgentReply: 'Agent 回复',
1657
+ typeHitlRequest: '待审批',
1658
+ typeHitlResolved: '审批结果',
1659
+ typeMember: '成员变更',
1660
+ },
1661
+ lineOps: {
1662
+ panelAria: '产线作业面板',
1663
+ title: '产线作业',
1664
+ statDcw: '写控',
1665
+ statDaq: '采集',
1666
+ statAml: '训练',
1667
+ statSafe: '拦截',
1668
+ filterAria: '作业筛选',
1669
+ filterDaq: '取数',
1670
+ filterTwin: '孪生',
1671
+ filterSafety: '安全',
1672
+ empty: '等待产线作业事件',
1673
+ systemName: '系统',
1674
+ },
1548
1675
  clusterError: {
1549
1676
  showAll: '全部 {p0} 条',
1550
1677
  k40p82001: '收起',
@@ -1608,6 +1735,7 @@ export default {
1608
1735
  clusterTool: {
1609
1736
  expandAll: '展开全部 {p0} 个调用',
1610
1737
  k40p82001: '收起',
1738
+ kindIndustrial: '工业',
1611
1739
  },
1612
1740
  commandPalette: {
1613
1741
  gotoTeams: '前往:AgentTeam 编组库',
@@ -1631,14 +1759,14 @@ export default {
1631
1759
  },
1632
1760
  composer: {
1633
1761
  loopIntervalRange: 'loop 间隔需设置为 1 到 86400 秒',
1634
- defaultLeadTitle: '未 {\'@\'} 指定:任务自动路由 lead 调度;{\'@\'} 某成员可直发',
1635
- chipHint: '输入 {\'@\'} 提及成员 · ⌘/Ctrl+Enter 发送',
1762
+ defaultLeadTitle: '未 {\'{\'@\'}\'} 指定:任务自动路由 lead 调度;{\'{\'@\'}\'} 某成员可直发',
1763
+ chipHint: '输入 {\'{\'@\'}\'} 提及成员 · ⌘/Ctrl+Enter 发送',
1636
1764
  seconds: '秒',
1637
1765
  sendTitle: '发送(⌘/Ctrl+Enter)',
1638
- kl3604i033: '直发 {\'@\'}{p0}',
1766
+ kl3604i033: '直发 {\'{\'@\'}\'}{p0}',
1639
1767
  k1cxjc4m034: '实时注入',
1640
- k1d2idgj035: '任务已下发 → {\'@\'}{p0}({p1})',
1641
- k1wk4bf036: '消息已发送给 {\'@\'}{p0}({p1})',
1768
+ k1d2idgj035: '任务已下发 → {\'{\'@\'}\'}{p0}({p1})',
1769
+ k1wk4bf036: '消息已发送给 {\'{\'@\'}\'}{p0}({p1})',
1642
1770
  k2z0fsx032: ' · 直发',
1643
1771
  k1b38y2b001: '不限次数',
1644
1772
  k1jqqvhe002: 'HITL 实时注入:目标运行中时直接注入其当前回合(同轮可见)',
@@ -1655,7 +1783,7 @@ export default {
1655
1783
  k1bosqfv013: '即时注入',
1656
1784
  kqdhdlq014: '任务标题不能为空',
1657
1785
  k1l36qf9015: '最大次数需设置为 1 到 10000 次,留空表示不限次数',
1658
- k1bw65is016: '请选择目标 Agent(可用 {\'@\'} 提及)',
1786
+ k1bw65is016: '请选择目标 Agent(可用 {\'{\'@\'}\'} 提及)',
1659
1787
  k1ww0ftm017: '运行中 · 任务进入其信箱排队',
1660
1788
  k9eq10w018: '目标正在执行:新任务投递到信箱,当前回合结束后按 FIFO 处理',
1661
1789
  kbhz1rp019: '已停止 · 任务将入队,唤醒后执行',
@@ -1669,8 +1797,8 @@ export default {
1669
1797
  kmf7lcc027: '目标运行时已停止:消息安全入队,重新启用后自动处理',
1670
1798
  k1tet5df028: '空闲 · 将立即起回合处理',
1671
1799
  kn600in029: '目标空闲:消息投递后立即开始处理',
1672
- k2h5jwc030: '输入任务下发(首行标题,{\'@\'} 成员直发,缺省 lead)… ⌘/Ctrl+Enter 提交',
1673
- k15mwzt7031: '输入消息/通知({\'@\'} 成员指定目标,缺省 lead)… ⌘/Ctrl+Enter 发送',
1800
+ k2h5jwc030: '输入任务下发(首行标题,{\'{\'@\'}\'} 成员直发,缺省 lead)… ⌘/Ctrl+Enter 提交',
1801
+ k15mwzt7031: '输入消息/通知({\'{\'@\'}\'} 成员指定目标,缺省 lead)… ⌘/Ctrl+Enter 发送',
1674
1802
  },
1675
1803
  deviceTwinPanel: {
1676
1804
  armDelete: '再次点击确认删除该设备实例',
@@ -1839,6 +1967,12 @@ export default {
1839
1967
  k401n2012: '无)',
1840
1968
  k1xj595a013: '已请求取消',
1841
1969
  ke7bh8u014: '已重新投递执行',
1970
+ timedOut: '已超时',
1971
+ remainingMinutes: '剩余约 {p0} 分钟',
1972
+ deadlineAt: '截止 {p0}',
1973
+ cancelWithChildren: '这会同时停止 {p0} 个活动后代任务,已完成结果会保留。确定继续?',
1974
+ cancelConfirm: '确定取消这个任务吗?',
1975
+ childrenStats: '后代 {p0} · 活动 {p1} · 已取消 {p2}',
1842
1976
  },
1843
1977
  townView: {
1844
1978
  saveLayoutTip: '把全部设备的位置/朝向/缩放写入数据库',
@@ -2220,6 +2354,16 @@ export default {
2220
2354
  hitlKindDsh: 'dsh 权限',
2221
2355
  hitlApprove: '批准',
2222
2356
  hitlReject: '拒绝',
2357
+ hitlReqQuestion: '提问',
2358
+ hitlReqApproval: '审批',
2359
+ hitlPolicy: '策略:{p0}',
2360
+ hitlEngineNote: '该类型待办需在对应引擎界面处理',
2361
+ hitlPermsLoading: '读取审批权限…',
2362
+ hitlNoPerm: '无审批权限',
2363
+ hitlAnswerPlaceholder: '输入答案',
2364
+ hitlSupplementPlaceholder: '补充说明(可选)',
2365
+ hitlSubmitAnswer: '提交答案',
2366
+ hitlCancelRequest: '取消请求',
2223
2367
  },
2224
2368
  ompTerminalPanel: {
2225
2369
  switchTarget: '── 切换目标 · {p0} ──',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentworkshop",
3
- "version": "0.7.52",
3
+ "version": "0.7.53",
4
4
  "type": "module",
5
5
  "description": "AgentWorkShop \u8f6f\u4ef6\u5f00\u53d1\u7cfb\u7edf - \u57fa\u4e8e Nuxt 4 \u7684\u914d\u7f6e\u9a71\u52a8\u8fd0\u884c\u8303\u5f0f",
6
6
  "license": "PolyForm-Noncommercial-1.0.0",
@@ -0,0 +1,3 @@
1
+ # AgentWorkShop 是登录制工业平台,无公开内容,谢绝一切爬虫抓取
2
+ User-agent: *
3
+ Disallow: /
@@ -21,7 +21,8 @@ import { WebStandardStreamableHTTPServerTransport } from '@modelcontextprotocol/
21
21
  import { createWorkshopMcpServer } from '../../mcp/workshop-server'
22
22
  import { getWorkshopManager } from '../../plugins/workshop'
23
23
 
24
- /** 会话注册表:sessionId → transport(stateful 会话状态保留) */
24
+ /** 会话注册表:sessionId → transport(stateful 会话状态保留);上限防匿名刷爆内存 */
25
+ const MAX_MCP_SESSIONS = 64
25
26
  const sessions = new Map<string, WebStandardStreamableHTTPServerTransport>()
26
27
 
27
28
  /** h3 event → web Request(跨 h3 1.x/2.x 兼容:不用版本互异的转换助手) */
@@ -65,6 +66,12 @@ export default defineEventHandler(async (event) => {
65
66
 
66
67
  // 新会话:预生成 sessionId,transport 在 initialize 时把它写入响应头
67
68
  if (!transport) {
69
+ if (sessions.size >= MAX_MCP_SESSIONS) {
70
+ return new Response(JSON.stringify({ error: 'TOO_MANY_SESSIONS', message: `MCP 会话数已达上限 ${MAX_MCP_SESSIONS}` }), {
71
+ status: 429,
72
+ headers: { 'content-type': 'application/json' },
73
+ })
74
+ }
68
75
  const newSessionId = randomUUID()
69
76
  transport = new WebStandardStreamableHTTPServerTransport({
70
77
  sessionIdGenerator: () => newSessionId,
@@ -2,11 +2,13 @@
2
2
  * GET /api/metrics —— 运维指标端点(R4,production-readiness-plan)。
3
3
  *
4
4
  * text/plain 简易指标格式(键值行,Prometheus 可用 textfile/自定义采集器接入)。
5
- * 无鉴权:仅暴露聚合计数与时间戳,不含业务数据;内网部署语义。
5
+ * 鉴权:任意有效用户 token(Bearer)——聚合计数与时间戳不含业务数据,
6
+ * 但公网部署下不向匿名暴露运行面信息;采集器配 Token 头即可接入。
6
7
  * 只读 globalThis 单例(不主动实例化),服务未装配时输出 0 —— 首次抓取即合法。
7
8
  */
8
9
  import { defineEventHandler, setResponseHeader } from 'h3'
9
10
  import { getOps } from '../services/workshop/ops/ops'
11
+ import { resolveUser } from './workshop/caller'
10
12
 
11
13
  interface MetricLine { name: string, help: string, value: number | string }
12
14
 
@@ -15,6 +17,7 @@ function fmt(lines: MetricLine[]): string {
15
17
  }
16
18
 
17
19
  export default defineEventHandler(async (event) => {
20
+ resolveUser(event)
18
21
  const g = globalThis as typeof globalThis & {
19
22
  __daqController?: { controllerState(): Record<string, number | boolean>, running?: boolean }
20
23
  __daqQueue?: { lost?: number }
@@ -1,8 +1,9 @@
1
1
  /**
2
2
  * /api/plugins/:name/** —— 插件自注册 API 的转发层(exact-match)。
3
3
  * 插件经 ctx.route(method, path, handler) 注册;handler(event) 返回值由 nitro 序列化。
4
- * 鉴权:插件在入口声明 auth:'user' | 'admin' | 'agent-or-user' 时由转发层统一校验
5
- * (缺省 'none' 保持开放,兼容既有插件/浏览器面板)。
4
+ * 鉴权:插件在入口声明 auth:'user' | 'admin' | 'agent-or-user' | 'none' 时由转发层统一校验。
5
+ * 安全默认 = 'user'(default-deny):未声明的插件不再匿名暴露,须显式声明 'none' 才开放
6
+ * (公网部署基线;确需匿名的只读面由插件作者显式声明并承担暴露责任)。
6
7
  * 错误隔离:插件 handler 抛错 → 结构化日志(带插件归属)+ 干净 500 信封,不裸传堆栈。
7
8
  */
8
9
  import { defineEventHandler, createError, readBody } from 'h3'
@@ -16,7 +17,7 @@ export default defineEventHandler(async (event) => {
16
17
  const path = '/' + (event.context.params?.path ?? '').replace(/^\/+/, '')
17
18
  const rec = host.plugins.get(name)
18
19
  // 声明式鉴权门:在进入插件 handler 前统一校验(禁用插件的路由表已不含其路由,天然 404)
19
- const authMode = String(rec?.auth ?? 'none')
20
+ const authMode = String(rec?.auth ?? 'user')
20
21
  if (authMode !== 'none') {
21
22
  try {
22
23
  if (authMode === 'admin') await requireAdmin(event)
@@ -0,0 +1,32 @@
1
+ /**
2
+ * GET /api/system/backup/list —— 备份清单(admin):库快照文件 + JSON/配置束目录。
3
+ * 只列文件名与大小/时间,不回传内容;恢复操作 = 停实例后由运维手工替换(安全优先不给在线恢复 API)。
4
+ */
5
+ import { readdirSync, statSync } from 'node:fs'
6
+ import { resolve } from 'node:path'
7
+ import { defineApiHandler } from '../../../utils/response'
8
+ import { requireAdmin } from '../../workshop/caller'
9
+ import { ensureDataDir } from '@/shared/config/home.mjs'
10
+
11
+ export default defineApiHandler(async (event) => {
12
+ requireAdmin(event)
13
+ const backupDir = resolve(ensureDataDir(), 'backups')
14
+ let entries: Array<{ name: string, kind: 'db' | 'files', bytes: number, mtime: string }> = []
15
+ try {
16
+ entries = readdirSync(backupDir, { withFileTypes: true }).flatMap((e) => {
17
+ const full = resolve(backupDir, e.name)
18
+ try {
19
+ const st = statSync(full)
20
+ return [{
21
+ name: e.name,
22
+ kind: (e.isDirectory() ? 'files' : 'db') as 'db' | 'files',
23
+ bytes: st.size,
24
+ mtime: st.mtime.toISOString(),
25
+ }]
26
+ }
27
+ catch { return [] }
28
+ }).sort((a, b) => b.mtime.localeCompare(a.mtime))
29
+ }
30
+ catch { /* 备份目录尚不存在 = 还没备过 */ }
31
+ return { backupDir, count: entries.length, entries: entries.slice(0, 200) }
32
+ })
@@ -0,0 +1,21 @@
1
+ /**
2
+ * POST /api/system/backup/run —— 手动触发一次全量备份(admin)。
3
+ * 复用 server/plugins/backup.ts 的 backupOnce(三库在线快照 + JSON/配置面 + 保留轮转),
4
+ * 成败均落 audit_log(system.backup.*)。
5
+ */
6
+ import { defineApiHandler } from '../../../utils/response'
7
+ import { requireAdmin } from '../../workshop/caller'
8
+ import { AppError } from '../../../utils/errors'
9
+
10
+ export default defineApiHandler(async (event) => {
11
+ requireAdmin(event)
12
+ const { backupOnce } = await import('../../../plugins/backup')
13
+ const { ensureDataDir } = await import('@/shared/config/home.mjs')
14
+ try {
15
+ await backupOnce(ensureDataDir())
16
+ }
17
+ catch (err) {
18
+ throw new AppError(500, 'BACKUP_FAILED', `备份失败: ${err instanceof Error ? err.message : String(err)}`)
19
+ }
20
+ return { ok: true, at: new Date().toISOString() }
21
+ })
@@ -10,13 +10,23 @@ import { readBody } from 'h3'
10
10
  import { defineApiHandler } from '../../../utils/response'
11
11
  import { requireRole } from '../../workshop/caller'
12
12
  import { getSystemConfigService } from '../../../services/system-config'
13
+ import { recordOps } from '../../../services/workshop/ops/ops'
13
14
 
14
15
  export default defineApiHandler(async (event) => {
15
- requireRole(event, ['admin'])
16
+ const user = requireRole(event, ['admin'])
16
17
  const body = (await readBody<Record<string, unknown>>(event)) ?? {}
17
18
  const overrides = body.override ?? body.overrides ?? body
18
19
  if (!overrides || typeof overrides !== 'object' || Array.isArray(overrides)) {
19
20
  return { ok: false, message: '请求体应为 { "override": { key: value } }' }
20
21
  }
21
- return { ok: true, ...getSystemConfigService().patch(overrides as Record<string, unknown>) }
22
+ const res = getSystemConfigService().patch(overrides as Record<string, unknown>)
23
+ // 高危管理面留痕:改了哪些键(值不落审计——可能含凭据),谁改的
24
+ if (res.changed?.length) {
25
+ recordOps({
26
+ actor: user.id, actorName: user.name, actorKind: 'user',
27
+ action: 'system.settings.update', kind: 'system',
28
+ summary: `运行时设置变更:${res.changed.join(', ')}`,
29
+ })
30
+ }
31
+ return { ok: true, ...res }
22
32
  })