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
|
@@ -24,6 +24,7 @@ import { classifyOperation, type OperationMeta } from '@/app/composables/worksho
|
|
|
24
24
|
|
|
25
25
|
const props = defineProps<{ channelId: string }>()
|
|
26
26
|
|
|
27
|
+
const { t } = useI18n()
|
|
27
28
|
const chat = useChatStore()
|
|
28
29
|
const entities = useEntitiesStore()
|
|
29
30
|
const notifications = useNotificationsStore()
|
|
@@ -53,7 +54,7 @@ function senderNameOf(m: AepChatMessage): string {
|
|
|
53
54
|
|
|
54
55
|
function avatarText(m: AepChatMessage): string {
|
|
55
56
|
if (m.senderType === 'agent') return senderNameOf(m).charAt(0).toUpperCase()
|
|
56
|
-
return '
|
|
57
|
+
return t('chat.avatarHuman')
|
|
57
58
|
}
|
|
58
59
|
|
|
59
60
|
function renderText(m: AepChatMessage): string {
|
|
@@ -67,7 +68,7 @@ function operationOf(m: AepChatMessage): OperationMeta | null {
|
|
|
67
68
|
/** 引用锚点的发送者名(锚点不在已加载窗口内 → 显示"更早的消息") */
|
|
68
69
|
function replyAnchorName(m: AepChatMessage): string {
|
|
69
70
|
const anchor = m.replyToId ? byId.value.get(m.replyToId) : undefined
|
|
70
|
-
return anchor ? senderNameOf(anchor) : '
|
|
71
|
+
return anchor ? senderNameOf(anchor) : t('chat.earlierMessage')
|
|
71
72
|
}
|
|
72
73
|
|
|
73
74
|
/**
|
|
@@ -88,14 +89,22 @@ const deliveriesByMessage = computed<Map<string, AepChatDelivery[]>>(() => {
|
|
|
88
89
|
})
|
|
89
90
|
const deliveriesOf = (m: AepChatMessage): AepChatDelivery[] => deliveriesByMessage.value.get(m.id) ?? []
|
|
90
91
|
|
|
91
|
-
const
|
|
92
|
-
pending:
|
|
93
|
-
delivered:
|
|
94
|
-
consumed:
|
|
95
|
-
failed:
|
|
96
|
-
cancelled:
|
|
92
|
+
const DELIVERY_TONE: Record<AepChatDelivery['status'], string> = {
|
|
93
|
+
pending: 'pending',
|
|
94
|
+
delivered: 'delivered',
|
|
95
|
+
consumed: 'consumed',
|
|
96
|
+
failed: 'failed',
|
|
97
|
+
cancelled: 'cancelled',
|
|
97
98
|
}
|
|
98
99
|
|
|
100
|
+
const deliveryLabels = computed<Record<AepChatDelivery['status'], string>>(() => ({
|
|
101
|
+
pending: t('chat.deliveryPending'),
|
|
102
|
+
delivered: t('chat.deliveryDelivered'),
|
|
103
|
+
consumed: t('chat.deliveryConsumed'),
|
|
104
|
+
failed: t('chat.deliveryFailed'),
|
|
105
|
+
cancelled: t('chat.deliveryCancelled'),
|
|
106
|
+
}))
|
|
107
|
+
|
|
99
108
|
function setReply(m: AepChatMessage): void {
|
|
100
109
|
chat.setReplyTarget({
|
|
101
110
|
channelId: props.channelId,
|
|
@@ -181,19 +190,19 @@ watch(() => props.channelId, async () => {
|
|
|
181
190
|
<div class="chat-timeline">
|
|
182
191
|
<div class="ct-head">
|
|
183
192
|
<span class="i-tabler-messages ct-icon" />
|
|
184
|
-
<span class="ct-title"
|
|
185
|
-
<span class="ct-count">{{ messages.length }}
|
|
193
|
+
<span class="ct-title">{{ $t('chat.title') }}</span>
|
|
194
|
+
<span class="ct-count">{{ $t('chat.messageCount', { p0: messages.length }) }}</span>
|
|
186
195
|
<span class="ct-spacer" />
|
|
187
196
|
<span
|
|
188
197
|
v-if="!atBottom"
|
|
189
198
|
class="ct-jump"
|
|
190
199
|
role="button"
|
|
191
200
|
tabindex="0"
|
|
192
|
-
title="
|
|
201
|
+
:title="$t('chat.backToLatest')"
|
|
193
202
|
@click="scrollToBottom(); atBottom = true"
|
|
194
203
|
@keydown.enter="scrollToBottom(); atBottom = true"
|
|
195
204
|
>
|
|
196
|
-
<span class="i-tabler-arrow-down" />
|
|
205
|
+
<span class="i-tabler-arrow-down" /> {{ $t('chat.latest') }}
|
|
197
206
|
</span>
|
|
198
207
|
</div>
|
|
199
208
|
|
|
@@ -209,7 +218,7 @@ watch(() => props.channelId, async () => {
|
|
|
209
218
|
:disabled="loading"
|
|
210
219
|
@click="loadEarlier"
|
|
211
220
|
>
|
|
212
|
-
{{ loading ? '
|
|
221
|
+
{{ loading ? $t('chat.loading') : $t('chat.loadEarlier') }}
|
|
213
222
|
</button>
|
|
214
223
|
|
|
215
224
|
<div
|
|
@@ -217,9 +226,9 @@ watch(() => props.channelId, async () => {
|
|
|
217
226
|
class="ct-empty"
|
|
218
227
|
>
|
|
219
228
|
<span class="i-tabler-message-2 ct-empty-icon" />
|
|
220
|
-
<div
|
|
229
|
+
<div>{{ $t('chat.emptyTitle') }}</div>
|
|
221
230
|
<div class="ct-empty-sub">
|
|
222
|
-
|
|
231
|
+
{{ $t('chat.emptyHint') }}
|
|
223
232
|
</div>
|
|
224
233
|
</div>
|
|
225
234
|
|
|
@@ -252,16 +261,16 @@ watch(() => props.channelId, async () => {
|
|
|
252
261
|
v-else-if="m.senderType === 'agent'"
|
|
253
262
|
class="i-tabler-robot"
|
|
254
263
|
/>
|
|
255
|
-
{{ m.senderType === 'agent' ? (entities.agents[channelId]?.find(a => a.agentId === m.senderId)?.role ?? 'agent') : (m.senderType === 'user' ? '
|
|
264
|
+
{{ m.senderType === 'agent' ? (entities.agents[channelId]?.find(a => a.agentId === m.senderId)?.role ?? 'agent') : (m.senderType === 'user' ? $t('chat.roleUser') : $t('chat.roleSystem')) }}
|
|
256
265
|
</span>
|
|
257
266
|
<span class="ct-time">{{ formatLocalClock(m.createdAt, false) }}</span>
|
|
258
267
|
<button
|
|
259
268
|
type="button"
|
|
260
269
|
class="ct-reply-btn"
|
|
261
|
-
title="
|
|
270
|
+
:title="$t('chat.replyTitle')"
|
|
262
271
|
@click="setReply(m)"
|
|
263
272
|
>
|
|
264
|
-
<span class="i-tabler-arrow-back-up" />
|
|
273
|
+
<span class="i-tabler-arrow-back-up" /> {{ $t('chat.reply') }}
|
|
265
274
|
</button>
|
|
266
275
|
</div>
|
|
267
276
|
|
|
@@ -270,7 +279,7 @@ watch(() => props.channelId, async () => {
|
|
|
270
279
|
class="ct-replyto"
|
|
271
280
|
>
|
|
272
281
|
<span class="i-tabler-corner-down-right" />
|
|
273
|
-
|
|
282
|
+
{{ $t('chat.reply') }} <b>{{ replyAnchorName(m) }}</b>
|
|
274
283
|
</div>
|
|
275
284
|
|
|
276
285
|
<div
|
|
@@ -301,7 +310,7 @@ watch(() => props.channelId, async () => {
|
|
|
301
310
|
class="ct-mention-chip"
|
|
302
311
|
:class="mm.type"
|
|
303
312
|
:data-agent-id="mm.type === 'agent' ? mm.id : undefined"
|
|
304
|
-
:title="mm.type === 'agent' ? '
|
|
313
|
+
:title="mm.type === 'agent' ? $t('chat.mentionAgentTitle') : $t('chat.mentionMemberTitle')"
|
|
305
314
|
@click="mm.type === 'agent' && openAgent({ channelId, agentId: mm.id })"
|
|
306
315
|
>
|
|
307
316
|
<span :class="mm.type === 'agent' ? 'i-tabler-robot' : 'i-tabler-user'" />
|
|
@@ -318,10 +327,10 @@ watch(() => props.channelId, async () => {
|
|
|
318
327
|
v-for="d in deliveriesOf(m)"
|
|
319
328
|
:key="d.deliveryId"
|
|
320
329
|
class="ct-delivery"
|
|
321
|
-
:data-tone="
|
|
330
|
+
:data-tone="DELIVERY_TONE[d.status] ?? 'pending'"
|
|
322
331
|
:title="d.error || `deliveryId: ${d.deliveryId}`"
|
|
323
332
|
>
|
|
324
|
-
<span class="cd-dot" />@{{ entities.agentName(channelId, d.targetAgentId) }} · {{
|
|
333
|
+
<span class="cd-dot" />@{{ entities.agentName(channelId, d.targetAgentId) }} · {{ deliveryLabels[d.status] ?? d.status }}
|
|
325
334
|
</span>
|
|
326
335
|
</div>
|
|
327
336
|
|
|
@@ -331,9 +340,9 @@ watch(() => props.channelId, async () => {
|
|
|
331
340
|
class="ct-source"
|
|
332
341
|
>
|
|
333
342
|
<span class="i-tabler-link" />
|
|
334
|
-
|
|
343
|
+
{{ $t('chat.answeredFrom', { p0: m.sourceChatMessageId.slice(0, 8) }) }}
|
|
335
344
|
<template v-if="m.requesterUserId">
|
|
336
|
-
|
|
345
|
+
{{ $t('chat.askedBy', { p0: m.requesterUserId.slice(0, 8) }) }}
|
|
337
346
|
</template>
|
|
338
347
|
</div>
|
|
339
348
|
</div>
|
|
@@ -210,11 +210,11 @@ const sendChat = async (text: string): Promise<void> => {
|
|
|
210
210
|
chat.clearReplyTarget()
|
|
211
211
|
if (res.unresolvedMentions?.length) {
|
|
212
212
|
// 服务端逐目标校验归属:名单外的 @ 不会被投递,必须让人看见
|
|
213
|
-
message.warning(
|
|
213
|
+
message.warning(t('chat.unresolvedMentions', { p0: res.unresolvedMentions.join('、') }))
|
|
214
214
|
}
|
|
215
215
|
const n = res.deliveries?.length ?? 0
|
|
216
|
-
if (n > 0) message.success(
|
|
217
|
-
else message.success(
|
|
216
|
+
if (n > 0) message.success(t('chat.sentToChat', { p0: n }))
|
|
217
|
+
else message.success(t('chat.sentToChatNoAgent'))
|
|
218
218
|
}
|
|
219
219
|
|
|
220
220
|
const send = async (): Promise<void> => {
|
|
@@ -294,10 +294,10 @@ const send = async (): Promise<void> => {
|
|
|
294
294
|
catch (e) {
|
|
295
295
|
const code = chatErrorCode(e)
|
|
296
296
|
if (mode.value === 'chat' && code === 'CHAT_DISABLED') {
|
|
297
|
-
message.warning('
|
|
297
|
+
message.warning(t('chat.composerChatDisabled'))
|
|
298
298
|
}
|
|
299
299
|
else if (mode.value === 'chat' && (code === 'NOT_CHANNEL_MEMBER' || code === 'FORBIDDEN_LEGACY')) {
|
|
300
|
-
message.warning('
|
|
300
|
+
message.warning(t('chat.composerNotMember'))
|
|
301
301
|
}
|
|
302
302
|
else {
|
|
303
303
|
message.error(chatErrorMessage(e))
|
|
@@ -383,7 +383,7 @@ const reachHint = computed<Reach | null>(() => {
|
|
|
383
383
|
})
|
|
384
384
|
|
|
385
385
|
const placeholder = computed(() => {
|
|
386
|
-
if (mode.value === 'chat') return '
|
|
386
|
+
if (mode.value === 'chat') return t('chat.composerPlaceholder')
|
|
387
387
|
return mode.value === 'task'
|
|
388
388
|
? t('composer.k2h5jwc030')
|
|
389
389
|
: t('composer.k15mwzt7031')
|
|
@@ -428,7 +428,7 @@ const placeholder = computed(() => {
|
|
|
428
428
|
class="composer-block-hint"
|
|
429
429
|
>
|
|
430
430
|
<span class="i-tabler-lock" />
|
|
431
|
-
{{ isMember ? '
|
|
431
|
+
{{ isMember ? $t('chat.blockChatDisabled') : $t('chat.blockNotMember') }}
|
|
432
432
|
</div>
|
|
433
433
|
|
|
434
434
|
<textarea
|
|
@@ -20,6 +20,7 @@ import type { AepNotification, AepNotificationType } from '#shared/workshop-prot
|
|
|
20
20
|
const notifications = useNotificationsStore()
|
|
21
21
|
const wsStore = useWorkspacesStore()
|
|
22
22
|
const { hostNotifications } = useWorkshopWs()
|
|
23
|
+
const { t } = useI18n()
|
|
23
24
|
|
|
24
25
|
const open = ref(false)
|
|
25
26
|
const releaseHost = ref<(() => void) | null>(null)
|
|
@@ -48,14 +49,22 @@ watch(() => notifications.liveSeq, () => {
|
|
|
48
49
|
})
|
|
49
50
|
})
|
|
50
51
|
|
|
51
|
-
const TYPE_META: Record<AepNotificationType, {
|
|
52
|
-
mention: {
|
|
53
|
-
agent_reply: {
|
|
54
|
-
hitl_request: {
|
|
55
|
-
hitl_resolved: {
|
|
56
|
-
member: {
|
|
52
|
+
const TYPE_META: Record<AepNotificationType, { icon: string, tone: string }> = {
|
|
53
|
+
mention: { icon: 'i-tabler-at', tone: 'mention' },
|
|
54
|
+
agent_reply: { icon: 'i-tabler-robot', tone: 'reply' },
|
|
55
|
+
hitl_request: { icon: 'i-tabler-alert-triangle', tone: 'hitl' },
|
|
56
|
+
hitl_resolved: { icon: 'i-tabler-circle-check', tone: 'ok' },
|
|
57
|
+
member: { icon: 'i-tabler-user-plus', tone: 'info' },
|
|
57
58
|
}
|
|
58
59
|
|
|
60
|
+
const typeLabels = computed<Record<AepNotificationType, string>>(() => ({
|
|
61
|
+
mention: t('notifications.typeMention'),
|
|
62
|
+
agent_reply: t('notifications.typeAgentReply'),
|
|
63
|
+
hitl_request: t('notifications.typeHitlRequest'),
|
|
64
|
+
hitl_resolved: t('notifications.typeHitlResolved'),
|
|
65
|
+
member: t('notifications.typeMember'),
|
|
66
|
+
}))
|
|
67
|
+
|
|
59
68
|
const badge = computed(() => (notifications.unreadCount > 99 ? '99+' : String(notifications.unreadCount)))
|
|
60
69
|
|
|
61
70
|
/** 点击通知:先标已读,再跳到对应界面(群聊消息 → 该频道群聊;审批 → 运行时监控) */
|
|
@@ -98,7 +107,7 @@ async function markAll(): Promise<void> {
|
|
|
98
107
|
await notifications.markRead({ all: true })
|
|
99
108
|
}
|
|
100
109
|
catch (e) {
|
|
101
|
-
message.error(e instanceof Error ? e.message : '
|
|
110
|
+
message.error(e instanceof Error ? e.message : t('notifications.markReadFailed'))
|
|
102
111
|
}
|
|
103
112
|
finally {
|
|
104
113
|
markingAll.value = false
|
|
@@ -115,7 +124,7 @@ async function markAll(): Promise<void> {
|
|
|
115
124
|
<button
|
|
116
125
|
class="icon-btn nc-bell"
|
|
117
126
|
:class="{ unread: notifications.unreadCount > 0 }"
|
|
118
|
-
title="
|
|
127
|
+
:title="$t('notifications.bellTitle')"
|
|
119
128
|
>
|
|
120
129
|
<span class="i-tabler-bell" />
|
|
121
130
|
<span
|
|
@@ -126,15 +135,15 @@ async function markAll(): Promise<void> {
|
|
|
126
135
|
<template #overlay>
|
|
127
136
|
<div class="nc-menu">
|
|
128
137
|
<div class="nc-menu-title">
|
|
129
|
-
<span
|
|
130
|
-
<span class="nc-unread">{{ notifications.unreadCount }}
|
|
138
|
+
<span>{{ $t('notifications.title') }}</span>
|
|
139
|
+
<span class="nc-unread">{{ $t('notifications.unreadCount', { p0: notifications.unreadCount }) }}</span>
|
|
131
140
|
<button
|
|
132
141
|
v-if="notifications.unreadCount > 0"
|
|
133
142
|
type="button"
|
|
134
143
|
class="nc-markall"
|
|
135
144
|
@click.stop="markAll"
|
|
136
145
|
>
|
|
137
|
-
|
|
146
|
+
{{ $t('notifications.markAllRead') }}
|
|
138
147
|
</button>
|
|
139
148
|
</div>
|
|
140
149
|
<div class="nc-list">
|
|
@@ -152,7 +161,7 @@ async function markAll(): Promise<void> {
|
|
|
152
161
|
/>
|
|
153
162
|
<span class="nc-item-body">
|
|
154
163
|
<span class="nc-item-top">
|
|
155
|
-
<span class="nc-item-type">{{
|
|
164
|
+
<span class="nc-item-type">{{ typeLabels[n.type] ?? n.type }}</span>
|
|
156
165
|
<span class="nc-item-time">{{ formatLocalClock(n.createdAt, false) }}</span>
|
|
157
166
|
</span>
|
|
158
167
|
<span class="nc-item-title">{{ n.title }}</span>
|
|
@@ -171,7 +180,7 @@ async function markAll(): Promise<void> {
|
|
|
171
180
|
v-if="notifications.items.length === 0"
|
|
172
181
|
class="nc-empty"
|
|
173
182
|
>
|
|
174
|
-
|
|
183
|
+
{{ $t('notifications.empty') }}
|
|
175
184
|
</div>
|
|
176
185
|
</div>
|
|
177
186
|
</div>
|
|
@@ -57,7 +57,7 @@ async function renderPanels(): Promise<void> {
|
|
|
57
57
|
mounted.set(key, { el, cleanup: typeof cleanup === 'function' ? cleanup : undefined })
|
|
58
58
|
}
|
|
59
59
|
catch (err) {
|
|
60
|
-
console.warn(`[plugin-slot]
|
|
60
|
+
console.warn(`[plugin-slot] panel render failed ${key}:`, err)
|
|
61
61
|
}
|
|
62
62
|
}
|
|
63
63
|
}
|
|
@@ -95,13 +95,13 @@ const deadlineLabel = computed(() => {
|
|
|
95
95
|
const ts = new Date(value).getTime()
|
|
96
96
|
if (!Number.isFinite(ts)) return value
|
|
97
97
|
const delta = ts - Date.now()
|
|
98
|
-
if (delta <= 0) return '
|
|
98
|
+
if (delta <= 0) return t('taskInspectorDrawer.timedOut')
|
|
99
99
|
const mins = Math.ceil(delta / 60_000)
|
|
100
|
-
return mins < 60 ?
|
|
100
|
+
return mins < 60 ? t('taskInspectorDrawer.remainingMinutes', { p0: mins }) : t('taskInspectorDrawer.deadlineAt', { p0: formatLocalClock(value) })
|
|
101
101
|
})
|
|
102
102
|
const cancelTitle = computed(() => childHealth.value.total > 0
|
|
103
|
-
?
|
|
104
|
-
: '
|
|
103
|
+
? t('taskInspectorDrawer.cancelWithChildren', { p0: childHealth.value.active })
|
|
104
|
+
: t('taskInspectorDrawer.cancelConfirm'))
|
|
105
105
|
|
|
106
106
|
/** AEP 状态时间线重放 */
|
|
107
107
|
const timeline = computed(() => {
|
|
@@ -254,7 +254,7 @@ const stateColor: Record<string, string> = {
|
|
|
254
254
|
v-if="childHealth.total > 0"
|
|
255
255
|
class="guardrail-chip tree"
|
|
256
256
|
>
|
|
257
|
-
<span class="i-tabler-git-branch" />
|
|
257
|
+
<span class="i-tabler-git-branch" /> {{ $t('taskInspectorDrawer.childrenStats', { p0: childHealth.total, p1: childHealth.active, p2: childHealth.canceled }) }}
|
|
258
258
|
</span>
|
|
259
259
|
</div>
|
|
260
260
|
|
|
@@ -51,7 +51,7 @@ const hasMore = computed(() => toolLines.value.length > MAX)
|
|
|
51
51
|
v-if="t.meta.kind !== 'native'"
|
|
52
52
|
class="tool-kind"
|
|
53
53
|
:class="t.meta.kind"
|
|
54
|
-
>{{ t.meta.kind === 'industrial' ? '
|
|
54
|
+
>{{ t.meta.kind === 'industrial' ? $t('clusterTool.kindIndustrial') : 'harness' }}</span>
|
|
55
55
|
</div>
|
|
56
56
|
<button
|
|
57
57
|
v-if="hasMore"
|
|
@@ -41,10 +41,10 @@ const requireReply = defineModel<boolean>('requireReply', { required: true })
|
|
|
41
41
|
v-if="canPost || !perms"
|
|
42
42
|
type="button"
|
|
43
43
|
:class="{ on: mode === 'chat' }"
|
|
44
|
-
title="
|
|
44
|
+
:title="$t('chat.toolbarChatTitle')"
|
|
45
45
|
@click="emit('pick', 'chat')"
|
|
46
46
|
>
|
|
47
|
-
|
|
47
|
+
{{ $t('chat.title') }}
|
|
48
48
|
</button>
|
|
49
49
|
<button
|
|
50
50
|
v-if="canManage || !perms || !canPost"
|
|
@@ -34,7 +34,7 @@ const emit = defineEmits<{
|
|
|
34
34
|
class="aw-avatar mention-ava"
|
|
35
35
|
:class="c.type === 'agent' ? 'is-agent' : 'is-user'"
|
|
36
36
|
:style="{ '--av': c.type === 'agent' ? agentHueColor(c.id) : 'var(--ink-faint)' }"
|
|
37
|
-
>{{ c.type === 'agent' ? 'A' : '
|
|
37
|
+
>{{ c.type === 'agent' ? 'A' : $t('chat.avatarHuman') }}</span>
|
|
38
38
|
<span class="mention-name">@{{ c.name }}</span>
|
|
39
39
|
<span class="mention-role">{{ c.role }}</span>
|
|
40
40
|
<span
|
|
@@ -16,12 +16,12 @@ const emit = defineEmits<{
|
|
|
16
16
|
<template>
|
|
17
17
|
<div class="reply-chip">
|
|
18
18
|
<span class="i-tabler-arrow-back-up" />
|
|
19
|
-
<span class="reply-label"
|
|
19
|
+
<span class="reply-label">{{ $t('chat.reply') }} <b>{{ senderName }}</b></span>
|
|
20
20
|
<span class="reply-excerpt">{{ excerpt }}</span>
|
|
21
21
|
<button
|
|
22
22
|
type="button"
|
|
23
23
|
class="reply-cancel"
|
|
24
|
-
title="
|
|
24
|
+
:title="$t('chat.cancelReply')"
|
|
25
25
|
@click="emit('cancel')"
|
|
26
26
|
>
|
|
27
27
|
<span class="i-tabler-x" />
|
|
@@ -22,37 +22,37 @@ defineProps<{
|
|
|
22
22
|
<template>
|
|
23
23
|
<div class="composer-status-chip">
|
|
24
24
|
<template v-if="mode === 'chat'">
|
|
25
|
-
<span class="chip-key"
|
|
25
|
+
<span class="chip-key">{{ $t('chat.title') }}</span>
|
|
26
26
|
<span
|
|
27
27
|
v-if="draftAgentMentions.length > 0"
|
|
28
28
|
class="reach-chip"
|
|
29
29
|
data-tone="info"
|
|
30
|
-
:title="'
|
|
30
|
+
:title="$t('chat.reachAgentsTitle')"
|
|
31
31
|
>
|
|
32
32
|
<span
|
|
33
33
|
class="reach-dot"
|
|
34
34
|
aria-hidden="true"
|
|
35
|
-
|
|
35
|
+
/>{{ $t('chat.reachAgentsText', { p0: draftAgentMentions.map(m => m.label).join(' @'), p1: draftAgentMentions.length }) }}
|
|
36
36
|
</span>
|
|
37
37
|
<span
|
|
38
38
|
v-else
|
|
39
39
|
class="reach-chip"
|
|
40
40
|
data-tone="ok"
|
|
41
|
-
title="
|
|
41
|
+
:title="$t('chat.reachNoAgentTitle')"
|
|
42
42
|
>
|
|
43
43
|
<span
|
|
44
44
|
class="reach-dot"
|
|
45
45
|
aria-hidden="true"
|
|
46
|
-
|
|
46
|
+
/>{{ $t('chat.reachNoAgentText') }}
|
|
47
47
|
</span>
|
|
48
48
|
<span
|
|
49
49
|
v-if="draftUserMentions.length > 0"
|
|
50
50
|
class="chip-hint"
|
|
51
|
-
>@{{ draftUserMentions.map(m => m.label).join(' @') }}
|
|
51
|
+
>@{{ draftUserMentions.map(m => m.label).join(' @') }}{{ $t('chat.notifyMembersSuffix') }}</span>
|
|
52
52
|
<span
|
|
53
53
|
v-else
|
|
54
54
|
class="chip-hint"
|
|
55
|
-
|
|
55
|
+
>{{ $t('chat.mentionHint') }}</span>
|
|
56
56
|
</template>
|
|
57
57
|
<template v-else-if="mode === 'task'">
|
|
58
58
|
<span class="chip-key">{{ $t('composer.k3wcox005') }}</span>
|
|
@@ -10,6 +10,7 @@ const props = defineProps<{ channelId: string }>()
|
|
|
10
10
|
const events = useEventsStore()
|
|
11
11
|
const entities = useEntitiesStore()
|
|
12
12
|
const filter = ref<'all' | OperationKind>('all')
|
|
13
|
+
const { t } = useI18n()
|
|
13
14
|
|
|
14
15
|
const allItems = computed<AepEnvelope[]>(() => events.ring(props.channelId).items)
|
|
15
16
|
const operations = computed(() => allItems.value
|
|
@@ -34,7 +35,7 @@ const stats = computed(() => {
|
|
|
34
35
|
})
|
|
35
36
|
|
|
36
37
|
function agentName(e: AepEnvelope): string {
|
|
37
|
-
return e.agentId ? entities.agentName(props.channelId, e.agentId) || e.agentId.slice(0, 8) : '
|
|
38
|
+
return e.agentId ? entities.agentName(props.channelId, e.agentId) || e.agentId.slice(0, 8) : t('lineOps.systemName')
|
|
38
39
|
}
|
|
39
40
|
function tone(meta: OperationMeta): string {
|
|
40
41
|
return `${meta.kind} ${meta.severity}`
|
|
@@ -47,14 +48,14 @@ function phaseTone(): string {
|
|
|
47
48
|
<template>
|
|
48
49
|
<section
|
|
49
50
|
class="line-ops-panel"
|
|
50
|
-
aria-label="
|
|
51
|
+
:aria-label="$t('lineOps.panelAria')"
|
|
51
52
|
>
|
|
52
53
|
<header class="lop-head">
|
|
53
54
|
<div>
|
|
54
55
|
<div class="lop-kicker">
|
|
55
56
|
<span class="lop-live" />LINE OPERATIONS
|
|
56
57
|
</div>
|
|
57
|
-
<h3
|
|
58
|
+
<h3>{{ $t('lineOps.title') }}</h3>
|
|
58
59
|
</div>
|
|
59
60
|
<span
|
|
60
61
|
class="lop-phase"
|
|
@@ -64,40 +65,40 @@ function phaseTone(): string {
|
|
|
64
65
|
|
|
65
66
|
<div class="lop-summary">
|
|
66
67
|
<div class="lop-stat dcw">
|
|
67
|
-
<span>DCW</span><b>{{ stats.dcw }}</b><small
|
|
68
|
+
<span>DCW</span><b>{{ stats.dcw }}</b><small>{{ $t('lineOps.statDcw') }}</small>
|
|
68
69
|
</div>
|
|
69
70
|
<div class="lop-stat daq">
|
|
70
|
-
<span>DAQ</span><b>{{ stats.daq }}</b><small
|
|
71
|
+
<span>DAQ</span><b>{{ stats.daq }}</b><small>{{ $t('lineOps.statDaq') }}</small>
|
|
71
72
|
</div>
|
|
72
73
|
<div class="lop-stat aml">
|
|
73
|
-
<span>AML</span><b>{{ stats.aml }}</b><small
|
|
74
|
+
<span>AML</span><b>{{ stats.aml }}</b><small>{{ $t('lineOps.statAml') }}</small>
|
|
74
75
|
</div>
|
|
75
76
|
<div class="lop-stat safety">
|
|
76
|
-
<span>SAFE</span><b>{{ stats.blocked }}</b><small
|
|
77
|
+
<span>SAFE</span><b>{{ stats.blocked }}</b><small>{{ $t('lineOps.statSafe') }}</small>
|
|
77
78
|
</div>
|
|
78
79
|
</div>
|
|
79
80
|
|
|
80
81
|
<nav
|
|
81
82
|
class="lop-filters"
|
|
82
|
-
aria-label="
|
|
83
|
+
:aria-label="$t('lineOps.filterAria')"
|
|
83
84
|
>
|
|
84
85
|
<button
|
|
85
86
|
:class="{ on: filter === 'all' }"
|
|
86
87
|
@click="filter = 'all'"
|
|
87
88
|
>
|
|
88
|
-
|
|
89
|
+
{{ $t('common.all') }}
|
|
89
90
|
</button>
|
|
90
91
|
<button
|
|
91
92
|
:class="{ on: filter === 'dcw' }"
|
|
92
93
|
@click="filter = 'dcw'"
|
|
93
94
|
>
|
|
94
|
-
|
|
95
|
+
{{ $t('lineOps.statDcw') }}
|
|
95
96
|
</button>
|
|
96
97
|
<button
|
|
97
98
|
:class="{ on: filter === 'daq' }"
|
|
98
99
|
@click="filter = 'daq'"
|
|
99
100
|
>
|
|
100
|
-
|
|
101
|
+
{{ $t('lineOps.filterDaq') }}
|
|
101
102
|
</button>
|
|
102
103
|
<button
|
|
103
104
|
:class="{ on: filter === 'aml' }"
|
|
@@ -109,13 +110,13 @@ function phaseTone(): string {
|
|
|
109
110
|
:class="{ on: filter === 'twin' }"
|
|
110
111
|
@click="filter = 'twin'"
|
|
111
112
|
>
|
|
112
|
-
|
|
113
|
+
{{ $t('lineOps.filterTwin') }}
|
|
113
114
|
</button>
|
|
114
115
|
<button
|
|
115
116
|
:class="{ on: filter === 'safety' }"
|
|
116
117
|
@click="filter = 'safety'"
|
|
117
118
|
>
|
|
118
|
-
|
|
119
|
+
{{ $t('lineOps.filterSafety') }}
|
|
119
120
|
</button>
|
|
120
121
|
</nav>
|
|
121
122
|
|
|
@@ -125,7 +126,7 @@ function phaseTone(): string {
|
|
|
125
126
|
class="lop-empty"
|
|
126
127
|
>
|
|
127
128
|
<span class="i-tabler-activity-heartbeat" />
|
|
128
|
-
<span
|
|
129
|
+
<span>{{ $t('lineOps.empty') }}</span>
|
|
129
130
|
</div>
|
|
130
131
|
<article
|
|
131
132
|
v-for="item in visible.slice(0, 24)"
|
|
@@ -24,6 +24,8 @@ const emit = defineEmits<{
|
|
|
24
24
|
|
|
25
25
|
const agent = computed(() => props.agent)
|
|
26
26
|
|
|
27
|
+
const { t } = useI18n()
|
|
28
|
+
|
|
27
29
|
/**
|
|
28
30
|
* §8 监督/watchdog 徽标:
|
|
29
31
|
* - `watchdog N`:监督回合已触发 watchdog(观察信号,不是取消);
|
|
@@ -35,10 +37,10 @@ const supervisionBadge = computed(() => {
|
|
|
35
37
|
if (!s) return null
|
|
36
38
|
const live = s.state === 'RUNNING' || s.state === 'WATCHDOG_SIGNALED' || s.state === 'WAITING_FOR_RESULT'
|
|
37
39
|
if (s.watchdogCount > 0 || s.state === 'WATCHDOG_SIGNALED') {
|
|
38
|
-
return { kind: 'watchdog' as const, text: `watchdog ${s.watchdogCount}`, title:
|
|
40
|
+
return { kind: 'watchdog' as const, text: `watchdog ${s.watchdogCount}`, title: t('agentLanesView.supervisionWatchdogTitle', { p0: s.watchdogAt ?? '-' }) }
|
|
39
41
|
}
|
|
40
|
-
if (live) return { kind: 'running' as const, text: 'supervising', title:
|
|
41
|
-
if (s.lastDecisionKind) return { kind: 'decision' as const, text:
|
|
42
|
+
if (live) return { kind: 'running' as const, text: 'supervising', title: t('agentLanesView.supervisionRunningTitle', { p0: s.attemptId?.slice(0, 8) ?? '-', p1: s.snapshotRevision ?? '-' }) }
|
|
43
|
+
if (s.lastDecisionKind) return { kind: 'decision' as const, text: t('agentLanesView.supervisionDecisionText', { p0: s.lastDecisionKind }), title: t('agentLanesView.supervisionDecisionTitle', { p0: s.lastDecisionKind, p1: s.completedAt ?? '-' }) }
|
|
42
44
|
return null
|
|
43
45
|
})
|
|
44
46
|
|
|
@@ -20,7 +20,26 @@ const emit = defineEmits<{
|
|
|
20
20
|
const api = useWorkshopApi()
|
|
21
21
|
|
|
22
22
|
// ===== Channel 实例设置(场景/工作目录热更新)+ 保存为模板 =====
|
|
23
|
-
const settingsForm = reactive({ name: '', scenarioPrompt: '', workspace: '' })
|
|
23
|
+
const settingsForm = reactive({ name: '', scenarioPrompt: '', workspace: '', lineId: '' })
|
|
24
|
+
|
|
25
|
+
// ===== v18 绑定产线(只读扩权:成员可读该线日志/配方/历史/状态;写仍走节点授权) =====
|
|
26
|
+
interface LineOption { id: string, name: string, state?: string }
|
|
27
|
+
const lineOptions = ref<LineOption[]>([])
|
|
28
|
+
const linesLoading = ref(false)
|
|
29
|
+
const lineChanged = ref(false)
|
|
30
|
+
const loadLines = async (): Promise<void> => {
|
|
31
|
+
linesLoading.value = true
|
|
32
|
+
try {
|
|
33
|
+
const res = await api.listDcwLines()
|
|
34
|
+
lineOptions.value = res?.data?.lines ?? []
|
|
35
|
+
}
|
|
36
|
+
catch { /* 产线清单不可得时留空,不阻塞设置弹窗 */ }
|
|
37
|
+
finally { linesLoading.value = false }
|
|
38
|
+
}
|
|
39
|
+
const onLineChange = (v: unknown): void => {
|
|
40
|
+
settingsForm.lineId = String(v ?? '')
|
|
41
|
+
lineChanged.value = true
|
|
42
|
+
}
|
|
24
43
|
|
|
25
44
|
// ===== Channel 级默认 LLM(harness → provider/model/effort;空 = 用引擎默认) =====
|
|
26
45
|
interface CatalogProvider {
|
|
@@ -73,6 +92,9 @@ const openSettings = (): void => {
|
|
|
73
92
|
settingsForm.name = meta?.name ?? ''
|
|
74
93
|
settingsForm.scenarioPrompt = meta?.scenarioPrompt ?? ''
|
|
75
94
|
settingsForm.workspace = meta?.workspace ?? ''
|
|
95
|
+
settingsForm.lineId = meta?.lineId ?? ''
|
|
96
|
+
lineChanged.value = false
|
|
97
|
+
void loadLines()
|
|
76
98
|
// 预填 channel 默认 LLM(llmJson 由列表接口透传)
|
|
77
99
|
let saved: ChannelLlmDefaults | null = null
|
|
78
100
|
try {
|
|
@@ -136,6 +158,10 @@ const saveSettings = async (): Promise<void> => {
|
|
|
136
158
|
? { ...(llmForm.provider ? { provider: llmForm.provider } : {}), model: llmForm.model, ...(llmForm.effort ? { effort: llmForm.effort } : {}) }
|
|
137
159
|
: null,
|
|
138
160
|
})
|
|
161
|
+
// v18 绑线变更单独提交(只读扩权;成员运行时自动回收重装配)
|
|
162
|
+
if (lineChanged.value) {
|
|
163
|
+
await api.bindChannelLine(props.channelId, settingsForm.lineId || null)
|
|
164
|
+
}
|
|
139
165
|
message.success(t('channelSessionList.kvsxlu6031'))
|
|
140
166
|
open.value = false
|
|
141
167
|
emit('saved')
|
|
@@ -165,6 +191,21 @@ const openSaveTemplate = (): void => {
|
|
|
165
191
|
@ok="saveSettings"
|
|
166
192
|
>
|
|
167
193
|
<a-form layout="vertical">
|
|
194
|
+
<a-form-item :label="$t('channelSessionList.bindLineLabel')">
|
|
195
|
+
<a-select
|
|
196
|
+
:value="settingsForm.lineId || undefined"
|
|
197
|
+
:loading="linesLoading"
|
|
198
|
+
allow-clear
|
|
199
|
+
show-search
|
|
200
|
+
option-filter-prop="label"
|
|
201
|
+
:placeholder="$t('channelSessionList.bindLinePlaceholder')"
|
|
202
|
+
:options="lineOptions.map(l => ({ value: l.id, label: l.name }))"
|
|
203
|
+
@change="onLineChange"
|
|
204
|
+
/>
|
|
205
|
+
<div class="bind-line-hint">
|
|
206
|
+
{{ $t('channelSessionList.bindLineHint') }}
|
|
207
|
+
</div>
|
|
208
|
+
</a-form-item>
|
|
168
209
|
<a-form-item :label="$t('channelSessionList.k1i8q46x007')">
|
|
169
210
|
<a-textarea
|
|
170
211
|
v-model:value="settingsForm.scenarioPrompt"
|
|
@@ -326,4 +367,5 @@ const openSaveTemplate = (): void => {
|
|
|
326
367
|
white-space: nowrap;
|
|
327
368
|
}
|
|
328
369
|
.ws-hint { font-size: 11px; color: var(--ink-faint); }
|
|
370
|
+
.bind-line-hint { margin-top: 4px; font-size: 11px; color: var(--ink-faint); line-height: 1.5; }
|
|
329
371
|
</style>
|