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.
- package/.AgentWorkShop/prompts/host-tools.json +70 -1
- package/.output/.AgentWorkShop/prompts/host-tools.json +70 -1
- package/.output/.AgentWorkShop/schema.json +2 -0
- package/.output/nitro.json +1 -1
- package/.output/public/_nuxt/{D0ldVwl-.js → 77DRSnQv.js} +1 -1
- package/.output/public/_nuxt/8oRmGaAV.js +1 -0
- package/.output/public/_nuxt/{BPou3U7b.js → BLnLjzka.js} +1 -1
- package/.output/public/_nuxt/{CFQyYMEn2.js → BSdJTnk12.js} +1 -1
- package/.output/public/_nuxt/{C4lagVdN2.js → BUD1CNvB2.js} +1 -1
- package/.output/public/_nuxt/{CTvh8v4T.js → BXR3tgEk.js} +1 -1
- package/.output/public/_nuxt/{Cbeifv55.js → BhlRInVa.js} +1 -1
- package/.output/public/_nuxt/{mNnuUoSy.js → BkfA3BbD.js} +1 -1
- package/.output/public/_nuxt/{ChGuLxwW2.js → BpcQDwKM2.js} +1 -1
- package/.output/public/_nuxt/{DQMbdg4t.js → BwlGxRxA.js} +1 -1
- package/.output/public/_nuxt/{Bt2ZL5332.js → C4sQKuhk2.js} +1 -1
- package/.output/public/_nuxt/{CkPxL4UX2.js → CBUIODly2.js} +1 -1
- package/.output/public/_nuxt/CR-ILcRu2.js +1 -0
- package/.output/public/_nuxt/CZLnEnbE.js +14 -0
- package/.output/public/_nuxt/{qPsch_ny2.js → Chxx-DIE2.js} +1 -1
- package/.output/public/_nuxt/{BiUhxH3t2.js → CjwxhpwR2.js} +1 -1
- package/.output/public/_nuxt/{B9cGf8mg.js → CvGYm7w8.js} +1 -1
- package/.output/public/_nuxt/{B9BmiUil.js → DAGuPgXa.js} +1 -1
- package/.output/public/_nuxt/{DefDtlKK.js → DE6H1HdJ.js} +1 -1
- package/.output/public/_nuxt/{D_Ce9Fon2.js → DFhyhDGa2.js} +1 -1
- package/.output/public/_nuxt/{BXx9AxdF2.js → DSqMyLCV2.js} +1 -1
- package/.output/public/_nuxt/{B8zP7kaj2.js → DV5joWTn2.js} +1 -1
- package/.output/public/_nuxt/{Da90gveK.js → DVOR2pWg.js} +1 -1
- package/.output/public/_nuxt/DWsgRq2c.js +1 -0
- package/.output/public/_nuxt/{mgWHSRc8.js → DZDi8inD.js} +1 -1
- package/.output/public/_nuxt/{xQX5r6tW.js → Dep0Hc9w.js} +1 -1
- package/.output/public/_nuxt/{evt5VGDh.js → DffgG8vT.js} +1 -1
- package/.output/public/_nuxt/{B_opxrHJ.js → DlCktWDT.js} +1 -1
- package/.output/public/_nuxt/{BVzw5a_0.js → DmzmgYHb.js} +1 -1
- package/.output/public/_nuxt/PluginSlot.CGH0vb95.css +1 -0
- package/.output/public/_nuxt/{ty5W5QwO.js → WmMwIS4y.js} +1 -1
- package/.output/public/_nuxt/{_id_.DamiFT0Q.css → _id_.rdGx-UDx.css} +1 -1
- package/.output/public/_nuxt/{BgEDwFMf.js → _kUzq9VF.js} +1 -1
- package/.output/public/_nuxt/_wsId_.XjmieZaJ.css +1 -0
- package/.output/public/_nuxt/{C00Rd6Cg.js → aV6YPjg0.js} +1 -1
- package/.output/public/_nuxt/builds/latest.json +1 -1
- package/.output/public/_nuxt/builds/meta/5ccc21c2-aba0-4b63-9a13-410e0569e345.json +1 -0
- package/.output/public/_nuxt/{default.CXb_zoN6.css → default.CyLpQD1C.css} +1 -1
- package/.output/public/_nuxt/o9rJf00k.js +1 -0
- package/.output/public/_nuxt/sl1EEoCr2.js +21 -0
- package/.output/public/robots.txt +3 -0
- package/.output/server/chunks/_/binding-authz.mjs +1 -1
- package/.output/server/chunks/_/character-asset.repo.mjs +1 -1
- package/.output/server/chunks/_/entity.mjs +1 -1
- package/.output/server/chunks/_/host-bindings.mjs +1 -1
- package/.output/server/chunks/_/nitro.mjs +1945 -1420
- package/.output/server/chunks/_/nitro.mjs.map +1 -1
- package/.output/server/chunks/_/scene-layout.repo.mjs +1 -1
- package/.output/server/chunks/build/{PluginSlot-D2WUZgbp.mjs → PluginSlot-CT4YaNrB.mjs} +5 -5
- package/.output/server/chunks/build/{PluginSlot-D2WUZgbp.mjs.map → PluginSlot-CT4YaNrB.mjs.map} +1 -1
- package/.output/server/chunks/build/TownView-fP9BiALv.mjs +1 -1
- package/.output/server/chunks/build/{_id_-BUpQSlzo.mjs → _id_-CK-QFrDV.mjs} +55 -51
- package/.output/server/chunks/build/_id_-CK-QFrDV.mjs.map +1 -0
- package/.output/server/chunks/build/{_wsId_-C4L9fVHC.mjs → _wsId_-DdqXzycE.mjs} +320 -202
- package/.output/server/chunks/build/{_wsId_-C4L9fVHC.mjs.map → _wsId_-DdqXzycE.mjs.map} +1 -1
- package/.output/server/chunks/build/{agents-ydYu-Ol9.mjs → agents-DqICy4AL.mjs} +6 -6
- package/.output/server/chunks/build/{agents-ydYu-Ol9.mjs.map → agents-DqICy4AL.mjs.map} +1 -1
- package/.output/server/chunks/build/{channel-templates-DP1ndA5K.mjs → channel-templates-gdCLajKy.mjs} +2 -2
- package/.output/server/chunks/build/{channel-templates-DP1ndA5K.mjs.map → channel-templates-gdCLajKy.mjs.map} +1 -1
- package/.output/server/chunks/build/daq-N69AOtgw.mjs +1 -1
- package/.output/server/chunks/build/dcw-CN9d3Rs7.mjs +1 -1
- package/.output/server/chunks/build/{default-DCf9tn1i.mjs → default-CXUe4HL7.mjs} +65 -62
- package/.output/server/chunks/build/{default-DCf9tn1i.mjs.map → default-CXUe4HL7.mjs.map} +1 -1
- package/.output/server/chunks/build/{pages-BzmrmLL_.mjs → pages-CRMeXrxG.mjs} +3 -3
- package/.output/server/chunks/build/{pages-BzmrmLL_.mjs.map → pages-CRMeXrxG.mjs.map} +1 -1
- package/.output/server/chunks/build/{plugins-DSka7-vS.mjs → plugins-NAS9MQ5r.mjs} +2 -2
- package/.output/server/chunks/build/{plugins-DSka7-vS.mjs.map → plugins-NAS9MQ5r.mjs.map} +1 -1
- package/.output/server/chunks/build/{schedules-BYR-lA1k.mjs → schedules-D8vYHgQ5.mjs} +2 -2
- package/.output/server/chunks/build/{schedules-BYR-lA1k.mjs.map → schedules-D8vYHgQ5.mjs.map} +1 -1
- package/.output/server/chunks/build/{settings-UyZ78w2e.mjs → settings-B7HA-sdb.mjs} +3 -3
- package/.output/server/chunks/build/{settings-UyZ78w2e.mjs.map → settings-B7HA-sdb.mjs.map} +1 -1
- package/.output/server/chunks/build/{teams-D-Y5mzU7.mjs → teams-wM-MdLv9.mjs} +8 -8
- package/.output/server/chunks/build/{teams-D-Y5mzU7.mjs.map → teams-wM-MdLv9.mjs.map} +1 -1
- package/.output/server/chunks/build/types-D6J7slEa.mjs +1 -1
- package/.output/server/chunks/build/{useAgentHarnessOptions-CRyQYYY0.mjs → useAgentHarnessOptions-BnFCh23W.mjs} +2 -2
- package/.output/server/chunks/build/{useAgentHarnessOptions-CRyQYYY0.mjs.map → useAgentHarnessOptions-BnFCh23W.mjs.map} +1 -1
- package/.output/server/chunks/build/{useAgentTemplateActions-CaRsOBmB.mjs → useAgentTemplateActions-DsBRUQni.mjs} +2 -2
- package/.output/server/chunks/build/{useAgentTemplateActions-CaRsOBmB.mjs.map → useAgentTemplateActions-DsBRUQni.mjs.map} +1 -1
- package/.output/server/chunks/build/{useAgentTemplateForm-ChiIuPYr.mjs → useAgentTemplateForm-DzQ_t2Ue.mjs} +2 -2
- package/.output/server/chunks/build/{useAgentTemplateForm-ChiIuPYr.mjs.map → useAgentTemplateForm-DzQ_t2Ue.mjs.map} +1 -1
- package/.output/server/chunks/build/{useAgentTemplatesCatalog-Bf5hk6Jf.mjs → useAgentTemplatesCatalog-Q7LgG1Af.mjs} +2 -2
- package/.output/server/chunks/build/{useAgentTemplatesCatalog-Bf5hk6Jf.mjs.map → useAgentTemplatesCatalog-Q7LgG1Af.mjs.map} +1 -1
- package/.output/server/chunks/build/useDaqAddNode-kW7uTSMQ.mjs +1 -1
- package/.output/server/chunks/build/useDaqDetailNode-D_vhG0jF.mjs +1 -1
- package/.output/server/chunks/build/useDaqDetailParams-JfqHvTxr.mjs +1 -1
- package/.output/server/chunks/build/useDaqFilters-BUQtZ82a.mjs +1 -1
- package/.output/server/chunks/build/useDaqStream-wOxZcMDA.mjs +1 -1
- package/.output/server/chunks/build/useDaqTemplates-BqQRdrIm.mjs +1 -1
- package/.output/server/chunks/build/{useDashboardData-CNOY4Bi3.mjs → useDashboardData-DWJ6vHjm.mjs} +2 -2
- package/.output/server/chunks/build/{useDashboardData-CNOY4Bi3.mjs.map → useDashboardData-DWJ6vHjm.mjs.map} +1 -1
- package/.output/server/chunks/build/useDcwAddNode-C1HDP3yG.mjs +1 -1
- package/.output/server/chunks/build/useDcwStream-D04kCV3J.mjs +1 -1
- package/.output/server/chunks/build/{useTeamActions-C51ciLb0.mjs → useTeamActions-BOLQkYxg.mjs} +2 -2
- package/.output/server/chunks/build/{useTeamActions-C51ciLb0.mjs.map → useTeamActions-BOLQkYxg.mjs.map} +1 -1
- package/.output/server/chunks/build/{useTeamAddMemberDialog-DthpCMP8.mjs → useTeamAddMemberDialog-BCgrLPxI.mjs} +2 -2
- package/.output/server/chunks/build/{useTeamAddMemberDialog-DthpCMP8.mjs.map → useTeamAddMemberDialog-BCgrLPxI.mjs.map} +1 -1
- package/.output/server/chunks/build/{useTeamCreateDialog-Dc2KTwyg.mjs → useTeamCreateDialog-CJk40LqS.mjs} +2 -2
- package/.output/server/chunks/build/{useTeamCreateDialog-Dc2KTwyg.mjs.map → useTeamCreateDialog-CJk40LqS.mjs.map} +1 -1
- package/.output/server/chunks/build/{useTeamDeployDialog-CXpvPnJD.mjs → useTeamDeployDialog-49hdUXQP.mjs} +2 -2
- package/.output/server/chunks/build/{useTeamDeployDialog-CXpvPnJD.mjs.map → useTeamDeployDialog-49hdUXQP.mjs.map} +1 -1
- package/.output/server/chunks/build/{useTeamPluginDialog-DTs-7SSm.mjs → useTeamPluginDialog-Dh-QOoiU.mjs} +2 -2
- package/.output/server/chunks/build/{useTeamPluginDialog-DTs-7SSm.mjs.map → useTeamPluginDialog-Dh-QOoiU.mjs.map} +1 -1
- package/.output/server/chunks/build/{useTeamsCatalog-CcpetYyW.mjs → useTeamsCatalog-HBSyKt5P.mjs} +2 -2
- package/.output/server/chunks/build/{useTeamsCatalog-CcpetYyW.mjs.map → useTeamsCatalog-HBSyKt5P.mjs.map} +1 -1
- package/.output/server/chunks/build/{useWorkshopApi-CO3ophqt.mjs → useWorkshopApi-C9sTYu1F.mjs} +9 -1
- package/.output/server/chunks/build/useWorkshopApi-C9sTYu1F.mjs.map +1 -0
- package/.output/server/chunks/build/useWorkshopWs-Bm80bLn7.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.get.mjs +1 -1
- package/.output/server/chunks/routes/api/index.post.mjs +14 -3
- package/.output/server/chunks/routes/api/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/mcp/workshop.mjs +43 -14
- package/.output/server/chunks/routes/api/mcp/workshop.mjs.map +1 -1
- package/.output/server/chunks/routes/api/metrics.mjs +2 -0
- package/.output/server/chunks/routes/api/metrics.mjs.map +1 -1
- package/.output/server/chunks/routes/api/plugins/_name/_...path_.mjs +1 -1
- package/.output/server/chunks/routes/api/plugins/_name/_...path_.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/backup/list.get.mjs +47 -0
- package/.output/server/chunks/routes/api/system/backup/list.get.mjs.map +1 -0
- package/.output/server/chunks/routes/api/system/backup/run.post.mjs +35 -0
- package/.output/server/chunks/routes/api/system/backup/run.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/system/config-groups/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/system/config-groups/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/system/index.get.mjs +1 -1
- package/.output/server/chunks/routes/api/system/index.patch.mjs +15 -4
- package/.output/server/chunks/routes/api/system/index.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/index.post.mjs +1 -1
- package/.output/server/chunks/routes/api/system/index2.get.mjs +1 -1
- package/.output/server/chunks/routes/api/system/monitor/terminal/ws.mjs +1 -1
- package/.output/server/chunks/routes/api/system/monitor/terminate.post.mjs +1 -1
- package/.output/server/chunks/routes/api/system/settings/events.get.mjs +1 -1
- package/.output/server/chunks/routes/api/system/settings/reset.post.mjs +15 -3
- package/.output/server/chunks/routes/api/system/settings/reset.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/timezone.get.mjs +1 -1
- package/.output/server/chunks/routes/api/users/_id_.delete.mjs +14 -3
- package/.output/server/chunks/routes/api/users/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/_id_.get.mjs +1 -1
- package/.output/server/chunks/routes/api/users/_id_.put.mjs +14 -3
- package/.output/server/chunks/routes/api/users/_id_.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/index.get.mjs +1 -1
- package/.output/server/chunks/routes/api/users/index.post.mjs +1 -1
- package/.output/server/chunks/routes/api/users/login.post.mjs +3 -2
- package/.output/server/chunks/routes/api/users/login.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/logout.post.mjs +1 -1
- package/.output/server/chunks/routes/api/users/me.get.mjs +1 -1
- package/.output/server/chunks/routes/api/users/register.post.mjs +4 -1
- package/.output/server/chunks/routes/api/users/register.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/setup-status.get.mjs +1 -1
- package/.output/server/chunks/routes/api/users/tokens/_id/token.get.mjs +1 -1
- package/.output/server/chunks/routes/api/users/tokens/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/users/tokens/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.post.mjs +19 -15
- package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/a2a/send.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/approvals/_id/decide.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/grant.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/revoke.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/index.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/index.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/index2.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/invoke.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/list.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/agents/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/agents/subscribe.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/datasets/_id/preview.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/entities/prune.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/env/recheck.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/env/uv.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/env/venv.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/index.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/index.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/index2.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/index3.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/index3.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/index4.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/index5.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/index6.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/index7.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/cancel.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/logs.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/retry.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/jobs/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/jobs/_id_.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/models/_id/predict.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/models/_id/promote.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/models/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/models/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id/train.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/twin/providers.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/approvals/_id/decide.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/assets/index.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/assets/index.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/assets/index2.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/audit.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/caller.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channel-templates/_id/instantiate.post.mjs +8 -3
- package/.output/server/chunks/routes/api/workshop/channel-templates/_id/instantiate.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channel-templates/from-channel.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/activate.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/search.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/chat/index.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/chat/index.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/events.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index.put.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index2.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index3.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index4.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index4.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index5.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/line.put.mjs +37 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/line.put.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/terminals.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/twin-profile.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/twin-profile.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/index.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/index.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels.post.mjs +4 -4
- package/.output/server/chunks/routes/api/workshop/daq/_id/bind.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id/bindings.put.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id/frames/content.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id/frames.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id/samples.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id/test.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/alarms/_id/ack.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/alarms.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/controller.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/index.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/infra/reconnect.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/infra.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/test-driver.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id/bind.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id/bindings.put.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id/param-ledger.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id/read.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id/test.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id/write.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/controller.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index2.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index2.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index3.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index3.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index4.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index4.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index5.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index5.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index6.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/journal/node/_nodeId/rollback.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/line/query.get.mjs +6 -1
- package/.output/server/chunks/routes/api/workshop/dcw/line/query.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/start.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/stop.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/judge.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/rollback.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/series.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id_.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id/read.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id/write.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/apply.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/mark-good.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/revert.post.mjs +3 -3
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/revert.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/rollback-good.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/versions.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/index.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/close.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/data.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/rollback.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/test-driver.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/device-twins/_id/control.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/device-twins/_id/telemetry.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/device-twins/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/device-twins/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/fs/dirs.get.mjs +14 -2
- package/.output/server/chunks/routes/api/workshop/fs/dirs.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/harnesses/_id/providers.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/harnesses.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/hitl/pending.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/hitl/respond.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index.put.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index10.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index2.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index2.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index3.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index3.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index4.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index5.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index5.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index6.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index6.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index7.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index7.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index8.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index8.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index9.get.mjs +3 -3
- package/.output/server/chunks/routes/api/workshop/index9.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index9.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/notifications/read.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/plugins/_name/disable.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/plugins/_name/enable.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.put.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/schedules/_id/runs.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/schedules/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id/complete.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id/dispatch.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id/report.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id_.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id/deploy.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id/index.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id/index.put.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id/index2.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/users/register.post.mjs +4 -1
- package/.output/server/chunks/routes/api/workshop/users/register.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/workspaces/_id/channel-templates/_tplId_.post.mjs +2 -2
- package/.output/server/chunks/routes/renderer.mjs +2 -2
- package/.output/server/chunks/virtual/entry.mjs +340 -52
- package/.output/server/chunks/virtual/precomputed.mjs +1 -1
- package/.output/server/package.json +1 -1
- package/README-zh.md +7 -3
- package/README.md +11 -5
- package/app/components/app-header/HitlBell.vue +9 -9
- package/app/components/dcw/DcwAddNodeModal.vue +3 -3
- package/app/components/dcw/DcwNodesTable.vue +4 -4
- package/app/components/dcw/DcwRecipeEditModal.vue +2 -2
- package/app/components/workshop/ChatMemberPanel.vue +39 -38
- package/app/components/workshop/ChatTimeline.vue +33 -24
- package/app/components/workshop/Composer.vue +7 -7
- package/app/components/workshop/NotificationCenter.vue +22 -13
- package/app/components/workshop/PluginSlot.vue +1 -1
- package/app/components/workshop/TaskInspectorDrawer.vue +5 -5
- package/app/components/workshop/blocks/ClusterTool.vue +1 -1
- package/app/components/workshop/composer/ComposerToolbar.vue +2 -2
- package/app/components/workshop/composer/MentionMenu.vue +1 -1
- package/app/components/workshop/composer/ReplyChip.vue +2 -2
- package/app/components/workshop/composer/StatusChip.vue +7 -7
- package/app/components/workshop/console/LineOperationsPanel.vue +15 -14
- package/app/components/workshop/lanes/LaneHeader.vue +5 -3
- package/app/components/workshop/session-list/ChannelSettingsModal.vue +43 -1
- package/app/composables/useCodeCopy.ts +16 -2
- package/app/composables/workshop/useWorkshopApi.ts +7 -0
- package/app/stores/workshop/notifications.ts +43 -17
- package/docs/cli.en.md +1 -1
- package/i18n/dicts/_en.json +1551 -1557
- package/i18n/dicts/_en2.json +300 -300
- package/i18n/dicts/_en4.json +114 -115
- package/i18n/dicts/agentLanesView.json +61 -57
- package/i18n/dicts/appHeader.json +17 -7
- package/i18n/dicts/channelSessionList.json +51 -48
- package/i18n/dicts/chat.json +79 -0
- package/i18n/dicts/clusterTool.json +4 -3
- package/i18n/dicts/composer.json +38 -38
- package/i18n/dicts/dcwDetail.json +219 -209
- package/i18n/dicts/lineOps.json +14 -0
- package/i18n/dicts/multiChannelView.json +13 -13
- package/i18n/dicts/notifications.json +13 -0
- package/i18n/dicts/taskInspectorDrawer.json +25 -19
- package/i18n/locales/en.ts +152 -8
- package/i18n/locales/zh-CN.ts +152 -8
- package/package.json +1 -1
- package/public/robots.txt +3 -0
- package/server/api/mcp/workshop.ts +8 -1
- package/server/api/metrics.ts +4 -1
- package/server/api/plugins/[name]/[...path].ts +4 -3
- package/server/api/system/backup/list.get.ts +32 -0
- package/server/api/system/backup/run.post.ts +21 -0
- package/server/api/system/settings/index.patch.ts +12 -2
- package/server/api/system/settings/reset.post.ts +11 -2
- package/server/api/users/[id].delete.ts +9 -2
- package/server/api/users/[id].put.ts +9 -2
- package/server/api/users/index.post.ts +9 -2
- package/server/api/users/login.post.ts +3 -3
- package/server/api/users/register.post.ts +11 -1
- package/server/api/workshop/a2a/[agentId]/rpc/index.post.ts +23 -13
- package/server/api/workshop/channel-templates/[id]/instantiate.post.ts +6 -0
- package/server/api/workshop/channels/[id]/line.put.ts +30 -0
- package/server/api/workshop/dcw/line/query.get.ts +6 -0
- package/server/api/workshop/dcw/recipes/[id]/revert.post.ts +3 -2
- package/server/api/workshop/fs/dirs.get.ts +19 -1
- package/server/api/workshop/ops-logs/index.get.ts +3 -2
- package/server/api/workshop/users/register.post.ts +7 -0
- package/server/mcp/workshop-server.ts +36 -13
- package/server/middleware/00-security-headers.ts +38 -0
- package/server/middleware/01-rate-guard.ts +101 -0
- package/server/plugins/backup.ts +56 -1
- package/server/plugins-builtin/diag-bridge/host/plugin.mjs +18 -11
- package/server/repositories/user.repository.ts +10 -5
- package/server/services/user.service.ts +24 -1
- package/server/services/workshop/agents/host-tool-bridge/dispatch.ts +1 -1
- package/server/services/workshop/agents/host-tool-bridge/tools/industrial.ts +4 -2
- package/server/services/workshop/agents/industrial/index.ts +1 -1
- package/server/services/workshop/agents/industrial/ops-tools.ts +168 -26
- package/server/services/workshop/agents/tool-classes.ts +2 -0
- package/server/services/workshop/aml/dataset-builder.ts +4 -2
- package/server/services/workshop/aml/job-orchestrator/process.ts +1 -0
- package/server/services/workshop/aml/job-orchestrator/shared.ts +2 -0
- package/server/services/workshop/aml/job-orchestrator/start-job.ts +5 -2
- package/server/services/workshop/db/channel.repo.ts +11 -1
- package/server/services/workshop/db/database/migrations.ts +2 -0
- package/server/services/workshop/db/database/rows.ts +2 -0
- package/server/services/workshop/db/database/seed.ts +19 -9
- package/server/services/workshop/dcw/dcw-controller/recipes.ts +60 -4
- package/server/services/workshop/dcw/dcw-controller/write.ts +35 -6
- package/server/services/workshop/dcw/dcw-recipe.repo.ts +4 -3
- package/server/services/workshop/dcw/param-map.repo.ts +3 -0
- package/server/services/workshop/plugins/host/init.mjs +9 -1
- package/server/services/workshop/plugins/host/load.mjs +2 -2
- package/server/services/workshop/runtime/manager/admin-channel.ts +27 -1
- package/server/services/workshop/runtime/manager/channel-templates.ts +5 -4
- package/server/services/workshop/runtime/manager/runtime-wiring.ts +17 -1
- package/shared/config/schema.json +2 -0
- package/.output/public/_nuxt/4wrEQ3np2.js +0 -21
- package/.output/public/_nuxt/CGQvF-Gg.js +0 -14
- package/.output/public/_nuxt/CcGuXiOa.js +0 -1
- package/.output/public/_nuxt/D0SNhlnt.js +0 -1
- package/.output/public/_nuxt/DnH9SRMW2.js +0 -1
- package/.output/public/_nuxt/ON2x-t6n.js +0 -1
- package/.output/public/_nuxt/PluginSlot.DmjNbrcX.css +0 -1
- package/.output/public/_nuxt/_wsId_.DkrQkT6r.css +0 -1
- package/.output/public/_nuxt/builds/meta/c64014ca-3595-4b7a-a5ca-055687c83ba2.json +0 -1
- package/.output/server/chunks/build/_id_-BUpQSlzo.mjs.map +0 -1
- package/.output/server/chunks/build/useWorkshopApi-CO3ophqt.mjs.map +0 -1
- package/scripts/.chk-tok +0 -1
- package/scripts/.retrain-body.json +0 -1
- package/scripts/.retrain3-body.json +0 -1
- package/scripts/.rt-tok +0 -1
- package/scripts/.rt3-tok +0 -1
package/README-zh.md
CHANGED
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
|
|
29
29
|
**[English](./README.md)** · **[在线文档](https://kingdol666.github.io/AgentWorkShop)** · **[版本发布](https://github.com/kingdol666/AgentWorkShop/releases)** · **[更新日志](./changelog.md)** · **[插件 API](./docs/plugins.md)** · **[SDK](./docs/sdk.md)**
|
|
30
30
|
|
|
31
|
-
<sub><b>v0.7.
|
|
31
|
+
<sub><b>v0.7.53</b> · 14 个执行引擎 · 6 种现场协议(5 内置 + 串口插件) · 115 个运行时设置项 · 双语文档(简体中文 / English)</sub>
|
|
32
32
|
|
|
33
33
|
<br />
|
|
34
34
|
|
|
@@ -165,6 +165,8 @@ AgentWorkShop 起家于**多智能体软件工作坊**——Channel 内的编码
|
|
|
165
165
|
| **人工审批的写控** | 数控下发经过「**安全量程 ∩ 活动配方窗口**」联锁 → 可选 **HITL 审批** → PLC 写入 → **回读校验** → 带签名的写历史。 |
|
|
166
166
|
| **数控读写通道** | 每个控制节点都能沿**写入时所用的同一条标定链路**读回 PLC 当前值:周期读 + 按需读 + Agent 读取,SET 与 ACT 并排呈现——读是被动观测,永不被写联锁阻断。 |
|
|
167
167
|
| **Recipe 版本化治理** | 参数修改按版本入史(归因 用户/Agent/系统 + 操作者 + 原因)。可非破坏地回退到任意修订版或最近一次良好批次。失效节点参数跳过并明确标识。 |
|
|
168
|
+
| **配方链路优化闭环** | Agent 像人类工艺员一样通过配方管理做优化:`recipe_trial` 把多参数候选**整批试验(不写版本)**→ 复测 → 有进步用 `recipe_update` 固化(同一配方 id,版本+1)→ 劣化触发**统一回退**(`recipe_rollback` 带 `dispatch:true` = 定义回退 + PLC 整批恢复)。单参数直调移出闭环;试验受四层限界与同线节拍卡控。 |
|
|
169
|
+
| **频道绑定产线(只读授权)** | 频道可绑定一条产线:全员无需节点绑定即可读取该线的运维日志、配方历史与实时状态(工具回执标注「频道绑定,只读」),写操作仍需节点授权。产线简报自动注入成员提示词;换绑即时回收成员运行时。 |
|
|
168
170
|
| **工艺参数语义映射与调控闭环** | Agent 用工程语义思考:`param_control(param, value)` 按**工艺参数**寻址(跨批次/换配方语义稳定),`param_read` 读回 PLC 当前值取证。每次写入被**四层限界**逐层收窄——节点安全量程 ∩ 工艺参数基准限界 ∩ 活动产品限界 ∩ 活动配方工艺窗口——且每次下发自动开一条调控记录,由 `dcw_judge` 落判定(keep / rollback / uncertain),`dcw_rollback` 执行回退。 |
|
|
169
171
|
| **产线运营** | 产线 → 产品 → 配方 → 批次。配方窗口门控采集并联锁写入;每条样本打标 `product/recipe/run`,实现按批次隔离。 |
|
|
170
172
|
| **多形态数采帧管线** | 多点轮廓(测厚仪/扫描仪)与 CCD 图像帧流经模板 sink 管线:向量与元数据入 Timescale(`daq_frames`),像素入对象存储(MinIO,不可达时自动降级到本地磁盘);派生指标阈值越限走既有告警链路。 |
|
|
@@ -184,7 +186,7 @@ AgentWorkShop 起家于**多智能体软件工作坊**——Channel 内的编码
|
|
|
184
186
|
| **运行时可观测** | `GET /api/system/monitor` 把 Agent 团队内部暴露成数字:根队列深度、看门狗介入次数、Harness 会话复用、记忆 outbox 积压——每项都有对应的文档化回退开关,新机制可以不重新部署就关掉。 |
|
|
185
187
|
| **产线操作单页(`/operations`)** | 一页看全对产线的每一次触碰:实时操作流水(REST 快照 + WS 推流)把写控、数采、建模、配方、回退、报警、产线、人工、系统动作归入**九类分类**,写控行渲染结构化 **前值 → 后值 diff 徽章**(失败标红),并直接从事件流推断**闭环阶段**(监视 → 探索·小步 → 推荐搜索 → 影子验证 → 生产)。同一数据面也供工作台控制台的「产线作业」面板使用。 |
|
|
186
188
|
| **外部 MCP 网关** | `aw mcp` 启动零依赖的 **stdio MCP 服务**(38 个工具),自动发现运行中的实例(环境变量 → 锁文件 → 配置文件),把产线、配方(含 mark-good)、受治理 DCW 写入、工艺参数语义映射、数采查询、频道、团队供给、模型晋升、判卷/回退与插件管理暴露给任意 MCP 客户端——受 `mcp.enabled` 运行时设置门控,附 `--doctor` 与 `--print-config` 辅助指令。 |
|
|
187
|
-
| **全量配置驱动运行时** | 全部运行旋钮(记忆预算、上下文压缩、回退护栏、保留策略、备份、日志级别、系统时区、MCP 开关…)在设置描述符注册表声明一次,优先级 **config.yml < runtime-settings < env**——**113 个设置项、18 组**(
|
|
189
|
+
| **全量配置驱动运行时** | 全部运行旋钮(记忆预算、上下文压缩、回退护栏、保留策略、备份、日志级别、系统时区、MCP 开关…)在设置描述符注册表声明一次,优先级 **config.yml < runtime-settings < env**——**113 个设置项、18 组**(36 live / 79 restart),代码零硬编码默认。 |
|
|
188
190
|
| **可配置系统时区** | 一个 `time.timeZone` 设置项(IANA 时区,live 热生效)统一驱动人读时间——日志、聊天、审计、Agent 记录与定时任务;机器时间轴(数采样本、`timestamptz`)仍保存绝对时间。 |
|
|
189
191
|
| **可配置节拍** | 采样与查询的默认值/下限全部是 **live 设置**(`daq.sampling.*`、`daq.query.*`):热重载、create/patch 时钳制,Agent 工具描述实时携带当前值。 |
|
|
190
192
|
|
|
@@ -386,7 +388,7 @@ aw update --check # 只报告,不安装
|
|
|
386
388
|
npm install -g agentworkshop@latest # 手动等效
|
|
387
389
|
```
|
|
388
390
|
|
|
389
|
-
版本遵循 semver。每次 `aw start` 都会校验配置根,并把 `home` 之前的旧版 `data/` 布局迁移进来(以最新文件为准),因此数据可以跨版本存活。SQLite schema 迁移在服务端启动时执行。当前版本:**v0.7.
|
|
391
|
+
版本遵循 semver。每次 `aw start` 都会校验配置根,并把 `home` 之前的旧版 `data/` 布局迁移进来(以最新文件为准),因此数据可以跨版本存活。SQLite schema 迁移在服务端启动时执行。当前版本:**v0.7.53**——见[版本发布](https://github.com/kingdol666/AgentWorkShop/releases)。
|
|
390
392
|
|
|
391
393
|
### 第一次「Agent × 产线」会话(约 2 分钟)
|
|
392
394
|
|
|
@@ -717,6 +719,8 @@ cd docs/site && npx vitepress build # 生产构建 → .vitepress/dist
|
|
|
717
719
|
| 六种现场协议:Modbus TCP · Modbus RTU-over-TCP · OPC UA · MQTT · HTTP + 内置 serial-bridge 串口插件(数采 + 数控双向) | 已交付 |
|
|
718
720
|
| Harness 可用性探测 + 执行前引擎强校验(UI 禁选 + 409) | 已交付 |
|
|
719
721
|
| Recipe 归因版本化 + 非破坏回退(界面 + Agent 工具) | 已交付 |
|
|
722
|
+
| 配方链路优化闭环:recipe_trial 整批试验(不写版本)→ 进步才固化 → 统一回退(PLC 整批恢复) | 已交付 |
|
|
723
|
+
| 频道绑定产线:全员只读日志/配方/状态 + 产线简报注入提示词 | 已交付 |
|
|
720
724
|
| Agent 自查工具:line_context / ops_log / recipe_log / recipe_versions / dcw_journal | 已交付 |
|
|
721
725
|
| 多 Harness 并行真实产线 live E2E(四引擎、一条产线) | 已交付 |
|
|
722
726
|
| HITL 审批流经真实 OPC UA 写入验证 | 已交付 |
|
package/README.md
CHANGED
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
|
|
29
29
|
**[简体中文](./README-zh.md)** · **[Documentation](https://kingdol666.github.io/AgentWorkShop)** · **[Releases](https://github.com/kingdol666/AgentWorkShop/releases)** · **[Changelog](./changelog.md)** · **[Plugin API](./docs/plugins.md)** · **[SDK](./docs/sdk.md)**
|
|
30
30
|
|
|
31
|
-
<sub><b>v0.7.
|
|
31
|
+
<sub><b>v0.7.53</b> · 14 engines · 6 field protocols (5 built-in + serial plugin) · 115 runtime settings · bilingual docs (简体中文 / English)</sub>
|
|
32
32
|
|
|
33
33
|
<br />
|
|
34
34
|
|
|
@@ -166,6 +166,8 @@ Recorded against a running instance: real DAQ history, real write control, real
|
|
|
166
166
|
| **Human-approved write control** | DCW writes flow through **safe-range ∩ recipe-window** interlock → optional **HITL approval** → PLC write → **readback verification** → signed write history. |
|
|
167
167
|
| **Read-write DCW channels** | Every control node also **reads its PLC value back** through the same calibration path it writes with: periodic + on-demand + agent reads surface **SET vs ACT** side by side — passive observation, never blocked by write interlocks. |
|
|
168
168
|
| **Recipe versioning & governance** | Parameter changes are versioned with attribution (user/agent/system + operator + reason). Roll back to any revision or the last-good batch — non-destructively. Stale-node params are skipped and clearly marked. |
|
|
169
|
+
| **Recipe-chain optimization loop** | Agents optimize through recipe management, the way human process engineers do: `recipe_trial` batch-dispatches multi-parameter candidates **without writing a version** → re-measure → progress adopts via `recipe_update` (same recipe id, version +1) → regression triggers a **unified rollback** (`recipe_rollback` with `dispatch: true` = definition revert + batch restore to the PLC). Single-knob direct dispatch is out of the loop; trials run under four-layer bounds and a per-line cadence. |
|
|
170
|
+
| **Channel-bound lines (read-only grant)** | A channel can bind a line: every member reads that line's ops logs, recipe history and live status without any node binding (tool outputs are tagged "channel-bound, read-only"), while writes still require node authorization. The line brief is injected into member prompts; binding changes hot-recycle member runtimes. |
|
|
169
171
|
| **Semantic parameter mapping & tuning loop** | Agents reason in engineering semantics: `param_control(param, value)` addresses a **process parameter** (stable across batches and recipe swaps) instead of a raw node, and `param_read` reads back the PLC value for evidence. Every write is narrowed by a **four-layer bound** — node safe range ∩ parameter baseline bounds ∩ active product bounds ∩ active recipe window — and each adjustment opens a tuning record that `dcw_judge` must close (keep / rollback / uncertain), with `dcw_rollback` executing the undo. |
|
|
170
172
|
| **Line operations** | Lines → products → recipes → batch runs. Recipe windows gate acquisition and interlock writes; every sample is tagged `product/recipe/run` for per-batch isolation. |
|
|
171
173
|
| **Multi-modal DAQ frame pipeline** | Multi-point profiles (thickness/scanner) and CCD image frames flow through template sink pipelines: vectors & metadata into Timescale (`daq_frames`), pixels into object storage (MinIO, auto disk fallback); derived-metric thresholds ride the existing alarm chain. |
|
|
@@ -185,7 +187,7 @@ Recorded against a running instance: real DAQ history, real write control, real
|
|
|
185
187
|
| **Runtime observability** | `GET /api/system/monitor` exposes the agent-team internals as numbers: root queue depth, watchdog interventions, harness session reuse, pending memory outbox — each guarded by a documented rollback switch, so new machinery can be turned off without a redeploy. |
|
|
186
188
|
| **Line operations feed (`/operations`)** | One page for every touch on the plant: a live operation feed (REST snapshot + WS stream) classifies writes, DAQ, AML, recipe, rollback, alarm, line, manual and system actions into **nine categories**, renders structured **before → after diff badges** on write rows (failures marked red), and infers the **closed-loop phase** (monitor → exploration · small-step → recommendation search → shadow verification → production) straight from the event stream. The same feed powers a line-operations panel inside the workshop console. |
|
|
187
189
|
| **External MCP gateway** | `aw mcp` starts a zero-dependency **stdio MCP server** (38 tools) that discovers a running instance automatically (env → lock file → config file) and exposes lines, recipes (incl. mark-good), governed DCW writes, semantic parameter mapping, DAQ queries, channels, team provisioning, model promotion, judge/rollback and plugin management to any MCP client — gated by the `mcp.enabled` runtime setting, with `--doctor` and `--print-config` helpers. |
|
|
188
|
-
| **Fully config-driven runtime** | Every runtime knob (memory budgets, compaction, rollback guardrails, retention, backups, log level, system timezone, MCP gate…) is declared once in the settings descriptor registry with precedence **config.yml < runtime-settings < env** — **
|
|
190
|
+
| **Fully config-driven runtime** | Every runtime knob (memory budgets, compaction, rollback guardrails, retention, backups, log level, system timezone, MCP gate…) is declared once in the settings descriptor registry with precedence **config.yml < runtime-settings < env** — **115 settings across 18 groups** (36 live / 79 restart), no hardcoded defaults in code. |
|
|
189
191
|
| **Configurable system timezone** | One `time.timeZone` setting (IANA id, live-applied) drives human-facing timestamps — logs, chat, audit, agent records and schedules — through a single formatter; machine timelines (DAQ samples, `timestamptz`) stay absolute. |
|
|
190
192
|
| **Configurable cadences** | Sampling and query defaults/floors are **live settings** (`daq.sampling.*`, `daq.query.*`): hot-reloaded, clamped on node create/patch, and agent tool descriptions always carry the current values. |
|
|
191
193
|
|
|
@@ -254,7 +256,7 @@ page headers stack, dense tables become scrollable ledgers with a pinned identit
|
|
|
254
256
|
<td width="50%"><img src="https://raw.githubusercontent.com/kingdol666/AgentWorkShop/main/docs/readme-assets/shot-monitor.png" alt="Runtime monitor" width="100%" /><br/><sub><b>Runtime monitor.</b> Every wired channel, member count, dependency cycle and owner.</sub></td>
|
|
255
257
|
</tr>
|
|
256
258
|
<tr>
|
|
257
|
-
<td><img src="https://raw.githubusercontent.com/kingdol666/AgentWorkShop/main/docs/readme-assets/shot-settings.png" alt="Settings" width="100%" /><br/><sub><b>Settings.</b>
|
|
259
|
+
<td><img src="https://raw.githubusercontent.com/kingdol666/AgentWorkShop/main/docs/readme-assets/shot-settings.png" alt="Settings" width="100%" /><br/><sub><b>Settings.</b> 115 keys across 18 groups, descriptor-driven — the same registry the CLI reads.</sub></td>
|
|
258
260
|
<td><img src="https://raw.githubusercontent.com/kingdol666/AgentWorkShop/main/docs/readme-assets/shot-plugins.png" alt="Plugins" width="100%" /><br/><sub><b>Plugins.</b> Three scopes, hot reload on edit, per-team switches.</sub></td>
|
|
259
261
|
</tr>
|
|
260
262
|
</table>
|
|
@@ -377,7 +379,7 @@ aw update --check # only report; nothing is installed
|
|
|
377
379
|
npm install -g agentworkshop@latest # manual equivalent
|
|
378
380
|
```
|
|
379
381
|
|
|
380
|
-
Releases follow semver. `aw start` verifies the config root on every launch and migrates the legacy pre-`home` `data/` layout into it (newest file wins), so data survives upgrades. SQLite schema migrations run server-side at boot. Current version: **v0.7.
|
|
382
|
+
Releases follow semver. `aw start` verifies the config root on every launch and migrates the legacy pre-`home` `data/` layout into it (newest file wins), so data survives upgrades. SQLite schema migrations run server-side at boot. Current version: **v0.7.53** — see [Releases](https://github.com/kingdol666/AgentWorkShop/releases).
|
|
381
383
|
|
|
382
384
|
### Your first agent × line session (~2 minutes)
|
|
383
385
|
|
|
@@ -655,7 +657,7 @@ AgentWorkShop/
|
|
|
655
657
|
├── sdk/ # agentworkshop/sdk — plugin context, hook bus, REST client, browser SDK
|
|
656
658
|
├── tui/ # terminal workbench (aw tui)
|
|
657
659
|
├── shared/
|
|
658
|
-
│ └── config/ # schema.json (
|
|
660
|
+
│ └── config/ # schema.json (115 setting descriptors) + engine (merge/validate/persist) + path resolver
|
|
659
661
|
├── config.yml # factory defaults (read at build/start; version comes from package.json)
|
|
660
662
|
├── .AgentWorkShop/ # config root in a checkout — prompts (versioned) + runtime overrides · data · logs · commands (git-ignored)
|
|
661
663
|
├── data/ # legacy pre-migration location (auto-migrated into the config root)
|
|
@@ -727,6 +729,10 @@ building, so those files are the single source of truth for the single-page guid
|
|
|
727
729
|
| Six field protocols: Modbus TCP · Modbus RTU-over-TCP · OPC UA · MQTT · HTTP + the built-in serial-bridge plugin (acquisition + write control) | Shipped |
|
|
728
730
|
| Harness availability probing + dispatch-time engine checks (UI disable + 409) | Shipped |
|
|
729
731
|
| Recipe versioning with attribution + non-destructive rollback (UI + agent tools) | Shipped |
|
|
732
|
+
| Recipe-chain optimization loop: recipe_trial batch trials (no version) → adopt on progress → unified rollback with PLC restore | Shipped |
|
|
733
|
+
| Channel-bound lines: read-only log/recipe/status access for all members, line brief injected into prompts | Shipped |
|
|
734
|
+
| Recipe-chain optimization loop: recipe_trial batch trials (no version) → adopt on progress → unified rollback with PLC restore | Shipped |
|
|
735
|
+
| Channel-bound lines: read-only log/recipe/status access for all members, line brief injected into prompts | Shipped |
|
|
730
736
|
| Agent self-audit: line_context / ops_log / recipe_log / recipe_versions / dcw_journal | Shipped |
|
|
731
737
|
| Multi-harness parallel live E2E on a real protocol line (four engines, one line) | Shipped |
|
|
732
738
|
| HITL approval flow verified over real OPC UA writes | Shipped |
|
|
@@ -61,7 +61,7 @@ const {
|
|
|
61
61
|
v-if="item.requestType || isQuestion(item)"
|
|
62
62
|
class="hitl-item-reqtype"
|
|
63
63
|
:data-type="requestTypeOf(item)"
|
|
64
|
-
>{{ isQuestion(item) ? '
|
|
64
|
+
>{{ isQuestion(item) ? t('appHeader.hitlReqQuestion') : t('appHeader.hitlReqApproval') }}</span>
|
|
65
65
|
</span>
|
|
66
66
|
<span class="hitl-item-title">{{ item.title }}</span>
|
|
67
67
|
<span
|
|
@@ -76,7 +76,7 @@ const {
|
|
|
76
76
|
v-if="item.policy"
|
|
77
77
|
class="hitl-item-policy"
|
|
78
78
|
>
|
|
79
|
-
<span class="i-tabler-shield-lock" />
|
|
79
|
+
<span class="i-tabler-shield-lock" /> {{ t('appHeader.hitlPolicy', { p0: policyLabel(item) }) }}
|
|
80
80
|
</span>
|
|
81
81
|
</button>
|
|
82
82
|
|
|
@@ -85,19 +85,19 @@ const {
|
|
|
85
85
|
v-if="!HITL_KINDS.includes(item.kind)"
|
|
86
86
|
class="hitl-answer-note"
|
|
87
87
|
>
|
|
88
|
-
|
|
88
|
+
{{ t('appHeader.hitlEngineNote') }}
|
|
89
89
|
</div>
|
|
90
90
|
<div
|
|
91
91
|
v-else-if="!permsKnown(item)"
|
|
92
92
|
class="hitl-answer-note"
|
|
93
93
|
>
|
|
94
|
-
|
|
94
|
+
{{ t('appHeader.hitlPermsLoading') }}
|
|
95
95
|
</div>
|
|
96
96
|
<div
|
|
97
97
|
v-else-if="!canAnswer(item)"
|
|
98
98
|
class="hitl-answer-note"
|
|
99
99
|
>
|
|
100
|
-
|
|
100
|
+
{{ t('appHeader.hitlNoPerm') }}{{ item.policy ? `(${policyLabel(item)})` : '' }}
|
|
101
101
|
</div>
|
|
102
102
|
<div
|
|
103
103
|
v-else
|
|
@@ -142,7 +142,7 @@ const {
|
|
|
142
142
|
v-if="!(q.options && q.options.length > 0) || q.freeText"
|
|
143
143
|
v-model:value="qFree[slotOf(item, q.id)]"
|
|
144
144
|
:rows="2"
|
|
145
|
-
:placeholder="q.options && q.options.length > 0 ? '
|
|
145
|
+
:placeholder="q.options && q.options.length > 0 ? t('appHeader.hitlSupplementPlaceholder') : t('appHeader.hitlAnswerPlaceholder')"
|
|
146
146
|
/>
|
|
147
147
|
</div>
|
|
148
148
|
<div class="hitl-btns">
|
|
@@ -152,14 +152,14 @@ const {
|
|
|
152
152
|
:loading="hitl.answering === `${item.kind}:${item.id}`"
|
|
153
153
|
@click="submitQuestion(item)"
|
|
154
154
|
>
|
|
155
|
-
|
|
155
|
+
{{ t('appHeader.hitlSubmitAnswer') }}
|
|
156
156
|
</a-button>
|
|
157
157
|
<a-button
|
|
158
158
|
size="small"
|
|
159
159
|
:disabled="hitl.answering === `${item.kind}:${item.id}`"
|
|
160
160
|
@click="submitCancel(item)"
|
|
161
161
|
>
|
|
162
|
-
|
|
162
|
+
{{ t('appHeader.hitlCancelRequest') }}
|
|
163
163
|
</a-button>
|
|
164
164
|
</div>
|
|
165
165
|
</template>
|
|
@@ -202,7 +202,7 @@ const {
|
|
|
202
202
|
:disabled="hitl.answering === `${item.kind}:${item.id}`"
|
|
203
203
|
@click="submitCancel(item)"
|
|
204
204
|
>
|
|
205
|
-
|
|
205
|
+
{{ t('common.cancel') }}
|
|
206
206
|
</a-button>
|
|
207
207
|
</div>
|
|
208
208
|
</template>
|
|
@@ -124,16 +124,16 @@ const addSemantics = defineModel<string>('semantics', { required: true })
|
|
|
124
124
|
>
|
|
125
125
|
</label>
|
|
126
126
|
<label class="f">
|
|
127
|
-
<span
|
|
127
|
+
<span>{{ $t('dcwDetail.stepLimitLabel') }} <em>({{ $t('dcwDetail.stepLimitUnit') }})</em></span>
|
|
128
128
|
<input
|
|
129
129
|
v-model.number="addStepLimit"
|
|
130
130
|
type="number"
|
|
131
131
|
min="0"
|
|
132
132
|
step="any"
|
|
133
133
|
class="inp"
|
|
134
|
-
placeholder="
|
|
134
|
+
:placeholder="$t('dcwDetail.stepLimitPlaceholder')"
|
|
135
135
|
>
|
|
136
|
-
<small class="field-hint">
|
|
136
|
+
<small class="field-hint">{{ $t('dcwDetail.stepLimitHint') }}</small>
|
|
137
137
|
</label>
|
|
138
138
|
</div>
|
|
139
139
|
|
|
@@ -54,7 +54,7 @@ function saveStep(n: DcwNodeView): void {
|
|
|
54
54
|
<th>{{ $t('dcwDetail.k1dexou6058') }}</th>
|
|
55
55
|
<th>{{ $t('dcwDetail.k1b1nnaa059') }}</th>
|
|
56
56
|
<th>{{ $t('dcwDetail.k1i8rtqt060') }}</th>
|
|
57
|
-
<th
|
|
57
|
+
<th>{{ $t('dcwDetail.thStepLimit') }}</th>
|
|
58
58
|
<th class="right">
|
|
59
59
|
{{ $t('dcwDetail.k40aa6061') }}
|
|
60
60
|
</th>
|
|
@@ -168,7 +168,7 @@ function saveStep(n: DcwNodeView): void {
|
|
|
168
168
|
step="any"
|
|
169
169
|
class="inp step-inp mono"
|
|
170
170
|
placeholder="2% default"
|
|
171
|
-
title="
|
|
171
|
+
:title="$t('dcwDetail.stepInputTitle')"
|
|
172
172
|
@input="stepDrafts[n.id] = ($event.target as HTMLInputElement).value === '' ? '' : Number(($event.target as HTMLInputElement).value)"
|
|
173
173
|
>
|
|
174
174
|
<button
|
|
@@ -176,10 +176,10 @@ function saveStep(n: DcwNodeView): void {
|
|
|
176
176
|
:disabled="stepPatchingId === n.id"
|
|
177
177
|
@click="saveStep(n)"
|
|
178
178
|
>
|
|
179
|
-
{{ stepPatchingId === n.id ? '…' : '
|
|
179
|
+
{{ stepPatchingId === n.id ? '…' : $t('common.save') }}
|
|
180
180
|
</button>
|
|
181
181
|
</div>
|
|
182
|
-
<small class="dim"
|
|
182
|
+
<small class="dim">{{ $t('dcwDetail.stepCurrent', { p0: n.stepLimit ?? $t('dcwDetail.stepUnset') }) }} {{ n.unit }}</small>
|
|
183
183
|
</td>
|
|
184
184
|
<td class="right">
|
|
185
185
|
<button
|
|
@@ -131,14 +131,14 @@ const recipeForm = defineModel<DcwRecipeForm>('form', { required: true })
|
|
|
131
131
|
>
|
|
132
132
|
</label>
|
|
133
133
|
<label class="f">
|
|
134
|
-
<span>
|
|
134
|
+
<span>{{ $t('dcwDetail.recipeStepLimitLabel') }}</span>
|
|
135
135
|
<input
|
|
136
136
|
v-model.number="p.stepLimit"
|
|
137
137
|
type="number"
|
|
138
138
|
min="0"
|
|
139
139
|
class="inp"
|
|
140
140
|
step="any"
|
|
141
|
-
placeholder="
|
|
141
|
+
:placeholder="$t('dcwDetail.recipeStepLimitPlaceholder')"
|
|
142
142
|
>
|
|
143
143
|
</label>
|
|
144
144
|
<button
|
|
@@ -16,6 +16,7 @@ import type { AepChannelMember } from '#shared/workshop-protocol'
|
|
|
16
16
|
|
|
17
17
|
const props = defineProps<{ channelId: string }>()
|
|
18
18
|
|
|
19
|
+
const { t } = useI18n()
|
|
19
20
|
const chat = useChatStore()
|
|
20
21
|
|
|
21
22
|
const perms = computed<ChatPermissions | null>(() => chat.permissions[props.channelId] ?? null)
|
|
@@ -78,14 +79,14 @@ async function onJoin(): Promise<void> {
|
|
|
78
79
|
busy.value = 'join'
|
|
79
80
|
try {
|
|
80
81
|
const status = await chat.join(props.channelId)
|
|
81
|
-
if (status === 'pending') message.info('
|
|
82
|
-
else message.success('
|
|
82
|
+
if (status === 'pending') message.info(t('chat.joinedPending'))
|
|
83
|
+
else message.success(t('chat.joinedOk'))
|
|
83
84
|
await refresh()
|
|
84
85
|
}
|
|
85
86
|
catch (e) {
|
|
86
87
|
const code = chatErrorCode(e)
|
|
87
|
-
if (code === 'CHAT_DISABLED') message.warning('
|
|
88
|
-
else if (code === 'CHANNEL_PRIVATE') message.warning('
|
|
88
|
+
if (code === 'CHAT_DISABLED') message.warning(t('chat.errChatDisabled'))
|
|
89
|
+
else if (code === 'CHANNEL_PRIVATE') message.warning(t('chat.errChannelPrivate'))
|
|
89
90
|
else message.error(chatErrorMessage(e))
|
|
90
91
|
}
|
|
91
92
|
finally {
|
|
@@ -98,11 +99,11 @@ async function onLeave(): Promise<void> {
|
|
|
98
99
|
busy.value = 'leave'
|
|
99
100
|
try {
|
|
100
101
|
await chat.leave(props.channelId)
|
|
101
|
-
message.success('
|
|
102
|
+
message.success(t('chat.leftOk'))
|
|
102
103
|
await refresh()
|
|
103
104
|
}
|
|
104
105
|
catch (e) {
|
|
105
|
-
if (chatErrorCode(e) === 'OWNER_CANNOT_LEAVE') message.warning('
|
|
106
|
+
if (chatErrorCode(e) === 'OWNER_CANNOT_LEAVE') message.warning(t('chat.errOwnerCannotLeave'))
|
|
106
107
|
else message.error(chatErrorMessage(e))
|
|
107
108
|
}
|
|
108
109
|
finally {
|
|
@@ -115,7 +116,7 @@ async function onApprove(m: AepChannelMember): Promise<void> {
|
|
|
115
116
|
busy.value = `approve:${m.userId}`
|
|
116
117
|
try {
|
|
117
118
|
await chat.approveMember(props.channelId, m.userId)
|
|
118
|
-
message.success('
|
|
119
|
+
message.success(t('chat.approvedOk'))
|
|
119
120
|
}
|
|
120
121
|
catch (e) {
|
|
121
122
|
message.error(chatErrorMessage(e))
|
|
@@ -130,7 +131,7 @@ async function onRemove(m: AepChannelMember): Promise<void> {
|
|
|
130
131
|
busy.value = `remove:${m.userId}`
|
|
131
132
|
try {
|
|
132
133
|
await chat.removeMember(props.channelId, m.userId)
|
|
133
|
-
message.success('
|
|
134
|
+
message.success(t('chat.removedOk'))
|
|
134
135
|
}
|
|
135
136
|
catch (e) {
|
|
136
137
|
message.error(chatErrorMessage(e))
|
|
@@ -156,12 +157,12 @@ async function onSaveSettings(): Promise<void> {
|
|
|
156
157
|
approvalPolicy: d.approvalPolicy,
|
|
157
158
|
chatEnabled: d.chatEnabled ? 1 : 0,
|
|
158
159
|
})
|
|
159
|
-
message.success('
|
|
160
|
+
message.success(t('chat.settingsSaved'))
|
|
160
161
|
syncDraft()
|
|
161
162
|
}
|
|
162
163
|
catch (e) {
|
|
163
164
|
if (chatErrorCode(e) === 'VERSION_CONFLICT') {
|
|
164
|
-
settingsError.value = '
|
|
165
|
+
settingsError.value = t('chat.settingsConflict')
|
|
165
166
|
}
|
|
166
167
|
else if (chatErrorCode(e) === 'CHAT_DISABLED') {
|
|
167
168
|
settingsError.value = chatErrorMessage(e)
|
|
@@ -175,12 +176,12 @@ async function onSaveSettings(): Promise<void> {
|
|
|
175
176
|
}
|
|
176
177
|
}
|
|
177
178
|
|
|
178
|
-
const
|
|
179
|
-
active: '
|
|
180
|
-
pending: '
|
|
181
|
-
left: '
|
|
182
|
-
removed: '
|
|
183
|
-
}
|
|
179
|
+
const statusLabels = computed<Record<AepChannelMember['status'], string>>(() => ({
|
|
180
|
+
active: t('chat.statusActive'),
|
|
181
|
+
pending: t('chat.statusPending'),
|
|
182
|
+
left: t('chat.statusLeft'),
|
|
183
|
+
removed: t('chat.statusRemoved'),
|
|
184
|
+
}))
|
|
184
185
|
|
|
185
186
|
const avatarText = (m: AepChannelMember): string =>
|
|
186
187
|
(m.displayName || m.userId.slice(0, 8)).trim().charAt(0).toUpperCase()
|
|
@@ -190,13 +191,13 @@ const avatarText = (m: AepChannelMember): string =>
|
|
|
190
191
|
<div class="member-panel">
|
|
191
192
|
<div class="mp-head">
|
|
192
193
|
<span class="i-tabler-users-group mp-icon" />
|
|
193
|
-
<span class="mp-title"
|
|
194
|
+
<span class="mp-title">{{ $t('chat.title') }}</span>
|
|
194
195
|
<span class="mp-count">{{ members.filter(m => m.status === 'active').length }}</span>
|
|
195
196
|
<span class="mp-spacer" />
|
|
196
197
|
<button
|
|
197
198
|
type="button"
|
|
198
199
|
class="mp-refresh"
|
|
199
|
-
title="
|
|
200
|
+
:title="$t('chat.refreshTitle')"
|
|
200
201
|
@click="refresh().then(syncDraft)"
|
|
201
202
|
>
|
|
202
203
|
<span class="i-tabler-refresh" />
|
|
@@ -215,23 +216,23 @@ const avatarText = (m: AepChannelMember): string =>
|
|
|
215
216
|
:loading="busy === 'join'"
|
|
216
217
|
@click="onJoin"
|
|
217
218
|
>
|
|
218
|
-
|
|
219
|
+
{{ $t('chat.join') }}
|
|
219
220
|
</a-button>
|
|
220
221
|
<div
|
|
221
222
|
v-else
|
|
222
223
|
class="mp-hint"
|
|
223
224
|
>
|
|
224
|
-
{{ perms === null ? '
|
|
225
|
+
{{ perms === null ? $t('chat.notMemberHint') : $t('chat.privateHint') }}
|
|
225
226
|
</div>
|
|
226
227
|
</template>
|
|
227
228
|
<template v-else-if="myStatus === 'pending'">
|
|
228
229
|
<div class="mp-hint pending">
|
|
229
|
-
<span class="i-tabler-hourglass" />
|
|
230
|
+
<span class="i-tabler-hourglass" /> {{ $t('chat.pendingHint') }}
|
|
230
231
|
</div>
|
|
231
232
|
</template>
|
|
232
233
|
<template v-else-if="!isOwner">
|
|
233
234
|
<a-popconfirm
|
|
234
|
-
title="
|
|
235
|
+
:title="$t('chat.leaveConfirm')"
|
|
235
236
|
:ok-text="$t('common.confirm')"
|
|
236
237
|
:cancel-text="$t('common.cancel')"
|
|
237
238
|
@confirm="onLeave"
|
|
@@ -241,7 +242,7 @@ const avatarText = (m: AepChannelMember): string =>
|
|
|
241
242
|
block
|
|
242
243
|
:loading="busy === 'leave'"
|
|
243
244
|
>
|
|
244
|
-
|
|
245
|
+
{{ $t('chat.leave') }}
|
|
245
246
|
</a-button>
|
|
246
247
|
</a-popconfirm>
|
|
247
248
|
</template>
|
|
@@ -249,7 +250,7 @@ const avatarText = (m: AepChannelMember): string =>
|
|
|
249
250
|
v-else
|
|
250
251
|
class="mp-hint"
|
|
251
252
|
>
|
|
252
|
-
<span class="i-tabler-crown" />
|
|
253
|
+
<span class="i-tabler-crown" /> {{ $t('chat.ownerHint') }}
|
|
253
254
|
</div>
|
|
254
255
|
</div>
|
|
255
256
|
|
|
@@ -274,7 +275,7 @@ const avatarText = (m: AepChannelMember): string =>
|
|
|
274
275
|
<span
|
|
275
276
|
class="mp-status"
|
|
276
277
|
:data-status="m.status"
|
|
277
|
-
>{{
|
|
278
|
+
>{{ statusLabels[m.status] }}</span>
|
|
278
279
|
<span class="mp-joined">{{ formatLocalClock(m.joinedAt, false) }}</span>
|
|
279
280
|
</div>
|
|
280
281
|
</div>
|
|
@@ -290,11 +291,11 @@ const avatarText = (m: AepChannelMember): string =>
|
|
|
290
291
|
:loading="busy === `approve:${m.userId}`"
|
|
291
292
|
@click="onApprove(m)"
|
|
292
293
|
>
|
|
293
|
-
|
|
294
|
+
{{ $t('chat.approve') }}
|
|
294
295
|
</a-button>
|
|
295
296
|
<a-popconfirm
|
|
296
297
|
v-if="m.status === 'active' || m.status === 'pending'"
|
|
297
|
-
title="
|
|
298
|
+
:title="$t('chat.removeConfirm')"
|
|
298
299
|
:ok-text="$t('common.remove')"
|
|
299
300
|
:cancel-text="$t('common.cancel')"
|
|
300
301
|
@confirm="onRemove(m)"
|
|
@@ -313,7 +314,7 @@ const avatarText = (m: AepChannelMember): string =>
|
|
|
313
314
|
v-if="sortedMembers.length === 0"
|
|
314
315
|
class="mp-hint"
|
|
315
316
|
>
|
|
316
|
-
|
|
317
|
+
{{ $t('chat.rosterHidden') }}
|
|
317
318
|
</div>
|
|
318
319
|
</div>
|
|
319
320
|
|
|
@@ -323,35 +324,35 @@ const avatarText = (m: AepChannelMember): string =>
|
|
|
323
324
|
class="mp-settings"
|
|
324
325
|
>
|
|
325
326
|
<div class="mp-sec-title">
|
|
326
|
-
|
|
327
|
+
{{ $t('chat.settingsTitle') }}
|
|
327
328
|
<span class="mp-ver">v{{ settings?.version ?? '-' }}</span>
|
|
328
329
|
</div>
|
|
329
330
|
<label class="mp-field">
|
|
330
|
-
<span
|
|
331
|
+
<span>{{ $t('chat.visibilityLabel') }}</span>
|
|
331
332
|
<a-select
|
|
332
333
|
v-model:value="draft.visibility"
|
|
333
334
|
size="small"
|
|
334
|
-
:options="[{ value: 'private', label: '
|
|
335
|
+
:options="[{ value: 'private', label: $t('chat.visibilityPrivate') }, { value: 'public', label: $t('chat.visibilityPublic') }]"
|
|
335
336
|
/>
|
|
336
337
|
</label>
|
|
337
338
|
<label class="mp-field">
|
|
338
|
-
<span
|
|
339
|
+
<span>{{ $t('chat.joinPolicyLabel') }}</span>
|
|
339
340
|
<a-select
|
|
340
341
|
v-model:value="draft.joinPolicy"
|
|
341
342
|
size="small"
|
|
342
|
-
:options="[{ value: 'owner_approve', label: '
|
|
343
|
+
:options="[{ value: 'owner_approve', label: $t('chat.joinPolicyOwnerApprove') }, { value: 'open', label: $t('chat.joinPolicyOpen') }]"
|
|
343
344
|
/>
|
|
344
345
|
</label>
|
|
345
346
|
<label class="mp-field">
|
|
346
|
-
<span
|
|
347
|
+
<span>{{ $t('chat.approvalPolicyLabel') }}</span>
|
|
347
348
|
<a-select
|
|
348
349
|
v-model:value="draft.approvalPolicy"
|
|
349
350
|
size="small"
|
|
350
|
-
:options="[{ value: 'owner_only', label: '
|
|
351
|
+
:options="[{ value: 'owner_only', label: $t('chat.approvalOwnerOnly') }, { value: 'any_member', label: $t('chat.approvalAnyMember') }]"
|
|
351
352
|
/>
|
|
352
353
|
</label>
|
|
353
354
|
<label class="mp-field switch">
|
|
354
|
-
<span
|
|
355
|
+
<span>{{ $t('chat.chatEnabledLabel') }}</span>
|
|
355
356
|
<a-switch
|
|
356
357
|
v-model:checked="draft.chatEnabled"
|
|
357
358
|
size="small"
|
|
@@ -367,7 +368,7 @@ const avatarText = (m: AepChannelMember): string =>
|
|
|
367
368
|
type="link"
|
|
368
369
|
@click="refresh().then(syncDraft)"
|
|
369
370
|
>
|
|
370
|
-
|
|
371
|
+
{{ $t('chat.refresh') }}
|
|
371
372
|
</a-button>
|
|
372
373
|
</div>
|
|
373
374
|
<a-button
|
|
@@ -377,7 +378,7 @@ const avatarText = (m: AepChannelMember): string =>
|
|
|
377
378
|
:loading="busy === 'settings'"
|
|
378
379
|
@click="onSaveSettings"
|
|
379
380
|
>
|
|
380
|
-
|
|
381
|
+
{{ $t('chat.saveSettings') }}
|
|
381
382
|
</a-button>
|
|
382
383
|
</div>
|
|
383
384
|
</div>
|