agentworkshop 0.7.53 → 0.7.54
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 +87 -0
- package/.output/.AgentWorkShop/prompts/host-tools.json +87 -0
- package/.output/.AgentWorkShop/schema.json +2 -1
- package/.output/nitro.json +1 -1
- package/.output/public/_nuxt/{9zrLAN2o2.js → BJhsCisg2.js} +1 -1
- package/.output/public/_nuxt/BOhcoxIu.js +2 -0
- package/.output/public/_nuxt/{BdM_Qr752.js → BP8TgWo02.js} +1 -1
- package/.output/public/_nuxt/{bg2adfck.js → BPqXOlYX.js} +1 -1
- package/.output/public/_nuxt/{Crbir9cT.js → BQOn0q6Y.js} +1 -1
- package/.output/public/_nuxt/{BLnLjzka.js → BQy0Yy7S.js} +1 -1
- package/.output/public/_nuxt/BTVyPFng2.js +1 -0
- package/.output/public/_nuxt/{qOlYoGLf.js → BWowAAJb.js} +1 -1
- package/.output/public/_nuxt/{BwlGxRxA.js → BZtgVXC5.js} +1 -1
- package/.output/public/_nuxt/BcX4fktE.js +1 -0
- package/.output/public/_nuxt/{B_LcD7qE2.js → BdF9OAZq2.js} +1 -1
- package/.output/public/_nuxt/{IU-UGkCJ2.js → BhcbvVOa2.js} +1 -1
- package/.output/public/_nuxt/{CBDX7p73.js → BjWbbMHs.js} +1 -1
- package/.output/public/_nuxt/{YaroNkJZ2.js → BmTzcKJg2.js} +1 -1
- package/.output/public/_nuxt/BnoyYd0Z2.js +1 -0
- package/.output/public/_nuxt/{Bl5dYv4m.js → BqYO-UfR.js} +1 -1
- package/.output/public/_nuxt/Btv3HXrq.js +1 -0
- package/.output/public/_nuxt/{BGKUW7ra.js → Btx8wL4-.js} +1 -1
- package/.output/public/_nuxt/{CBIoheY42.js → BuXaEtBG2.js} +1 -1
- package/.output/public/_nuxt/{DSqMyLCV2.js → BxWvUgMz2.js} +1 -1
- package/.output/public/_nuxt/{1g9IT9Qh2.js → BxoaZc_U2.js} +1 -1
- package/.output/public/_nuxt/C-LU6xv_.js +1 -0
- package/.output/public/_nuxt/{BcQXL8pb.js → C-y_g11k.js} +1 -1
- package/.output/public/_nuxt/C7_F68I7.js +1 -0
- package/.output/public/_nuxt/CFjveTJh.js +1 -0
- package/.output/public/_nuxt/{BQXCMsXk.js → CMWyj56j.js} +1 -1
- package/.output/public/_nuxt/{C4WhK2wq.js → COQM2L1M.js} +1 -1
- package/.output/public/_nuxt/{CjwxhpwR2.js → CV61ysvv.js} +1 -1
- package/.output/public/_nuxt/{sl1EEoCr2.js → Ca3iDJwu2.js} +5 -5
- package/.output/public/_nuxt/{BiOSWsjD.js → Cg8Pgbeu.js} +1 -1
- package/.output/public/_nuxt/{BSdJTnk12.js → Ch9KdZWb2.js} +1 -1
- package/.output/public/_nuxt/{B1RT9NTO2.js → ChN5v-i22.js} +1 -1
- package/.output/public/_nuxt/{DE6H1HdJ.js → Cpm5JYv4.js} +1 -1
- package/.output/public/_nuxt/{DsGf2IV82.js → CtXOpljm2.js} +1 -1
- package/.output/public/_nuxt/{EhhQmlBV2.js → D2Sm-GTk2.js} +1 -1
- package/.output/public/_nuxt/{DCtk3qqr.js → D8xUsQGt.js} +1 -1
- package/.output/public/_nuxt/{CQabB0oy.js → D9TpiWjt.js} +1 -1
- package/.output/public/_nuxt/DB4ma-iU2.js +1 -0
- package/.output/public/_nuxt/{BDmNbZ252.js → DCPhrNWR2.js} +1 -1
- package/.output/public/_nuxt/{BE7BrEw6.js → DNZmwhSD.js} +1 -1
- package/.output/public/_nuxt/{CMXcOb6W.js → DO9xaI9a.js} +1 -1
- package/.output/public/_nuxt/{H2rNs1O82.js → DUribplv2.js} +1 -1
- package/.output/public/_nuxt/DZuXfuXS.js +14 -0
- package/.output/public/_nuxt/{Ccps4cxo.js → D_hCLbi9.js} +1 -1
- package/.output/public/_nuxt/{DlCktWDT.js → Db4_F1T2.js} +1 -1
- package/.output/public/_nuxt/{Bhe953zV2.js → DioKmYyB2.js} +1 -1
- package/.output/public/_nuxt/{77DRSnQv.js → Dk6Zf3-L.js} +1 -1
- package/.output/public/_nuxt/{Dbe9TFc9.js → DlX0nqUe.js} +1 -1
- package/.output/public/_nuxt/{Chphw5IA2.js → Dm_iKz8k2.js} +1 -1
- package/.output/public/_nuxt/{NJn94js_.js → DnAn2LgG.js} +1 -1
- package/.output/public/_nuxt/DuPM4HXw.js +1 -0
- package/.output/public/_nuxt/{DNoEoo8t.js → Dz2SLIde.js} +1 -1
- package/.output/public/_nuxt/DzwIZ81f.js +1 -0
- package/.output/public/_nuxt/{DD6Z0yPN2.js → MbT4wXb62.js} +1 -1
- package/.output/public/_nuxt/{BpcQDwKM2.js → PY2GW_3N2.js} +1 -1
- package/.output/public/_nuxt/{2_DkYoqD2.js → QHo9mN-M2.js} +1 -1
- package/.output/public/_nuxt/{TownView.BvlfuLtP.css → TownView.Xt1yygrh.css} +1 -1
- package/.output/public/_nuxt/_id_.DZbVLNnu.css +1 -0
- package/.output/public/_nuxt/a4X3ARNm2.js +1 -0
- package/.output/public/_nuxt/builds/latest.json +1 -1
- package/.output/public/_nuxt/builds/meta/af879435-fc74-4017-ade0-3b92c1ab35bb.json +1 -0
- package/.output/public/_nuxt/cY_5jwFz2.js +1 -0
- package/.output/public/_nuxt/dVw8IHY62.js +1 -0
- package/.output/public/_nuxt/{LwIFGLgF.js → deBcbALe2.js} +1 -1
- package/.output/public/_nuxt/{BzvHUfRR.js → nT-bgxvf.js} +1 -1
- package/.output/public/_nuxt/tq3HbWr9.js +1 -0
- package/.output/public/_nuxt/{BH3obZJ42.js → uY58gQqR2.js} +1 -1
- package/.output/public/_nuxt/{ZuQtOnfI.js → vPfDYgvR.js} +1 -1
- package/.output/public/_nuxt/{zsRclU9w2.js → xX7ccjDl2.js} +1 -1
- package/.output/server/chunks/_/nitro.mjs +2652 -1422
- package/.output/server/chunks/_/nitro.mjs.map +1 -1
- package/.output/server/chunks/build/OmpTerminalPanel-mk31gVzA.mjs +1 -1
- package/.output/server/chunks/build/{TownView-fP9BiALv.mjs → TownView-Bf5VFYFj.mjs} +26 -19
- package/.output/server/chunks/build/TownView-Bf5VFYFj.mjs.map +1 -0
- package/.output/server/chunks/build/{_id_-CK-QFrDV.mjs → _id_-CuUmVPRg.mjs} +192 -82
- package/.output/server/chunks/build/_id_-CuUmVPRg.mjs.map +1 -0
- package/.output/server/chunks/build/{_id_-CDlur81q.mjs → _id_-WF20tjqT.mjs} +12 -11
- package/.output/server/chunks/build/_id_-WF20tjqT.mjs.map +1 -0
- package/.output/server/chunks/build/{_wsId_-DdqXzycE.mjs → _wsId_-BUIKB68b.mjs} +13 -10
- package/.output/server/chunks/build/{_wsId_-DdqXzycE.mjs.map → _wsId_-BUIKB68b.mjs.map} +1 -1
- package/.output/server/chunks/build/agents-DqICy4AL.mjs +2 -1
- package/.output/server/chunks/build/agents-DqICy4AL.mjs.map +1 -1
- package/.output/server/chunks/build/{aml-DsgtDLWF.mjs → aml-C55iuLn-.mjs} +15 -13
- package/.output/server/chunks/build/aml-C55iuLn-.mjs.map +1 -0
- package/.output/server/chunks/build/{api-BY6ji7RC.mjs → api-B4Om0mEc.mjs} +4 -3
- package/.output/server/chunks/build/api-B4Om0mEc.mjs.map +1 -0
- package/.output/server/chunks/build/{apiClient-D281qrK2.mjs → apiClient-BvXtNzC8.mjs} +2 -2
- package/.output/server/chunks/build/apiClient-BvXtNzC8.mjs.map +1 -0
- package/.output/server/chunks/build/channel-templates-gdCLajKy.mjs +3 -2
- package/.output/server/chunks/build/channel-templates-gdCLajKy.mjs.map +1 -1
- package/.output/server/chunks/build/constants-HPHJvjne.mjs +2 -1
- package/.output/server/chunks/build/constants-HPHJvjne.mjs.map +1 -1
- package/.output/server/chunks/build/{daq-N69AOtgw.mjs → daq-D0kLscVr.mjs} +15 -13
- package/.output/server/chunks/build/daq-D0kLscVr.mjs.map +1 -0
- package/.output/server/chunks/build/{dcw-CN9d3Rs7.mjs → dcw-DuhEyu7S.mjs} +11 -10
- package/.output/server/chunks/build/dcw-DuhEyu7S.mjs.map +1 -0
- package/.output/server/chunks/build/dcw-driver-badge-Df5wL_ZA.mjs +20 -0
- package/.output/server/chunks/build/dcw-driver-badge-Df5wL_ZA.mjs.map +1 -0
- package/.output/server/chunks/build/{default-CXUe4HL7.mjs → default-aFGiNebw.mjs} +6 -4
- package/.output/server/chunks/build/{default-CXUe4HL7.mjs.map → default-aFGiNebw.mjs.map} +1 -1
- package/.output/server/chunks/build/hitl-ePh3G3ue.mjs +132 -0
- package/.output/server/chunks/build/hitl-ePh3G3ue.mjs.map +1 -0
- package/.output/server/chunks/build/{logs-BcAjU1Ps.mjs → logs-BlOalbsZ.mjs} +11 -9
- package/.output/server/chunks/build/logs-BlOalbsZ.mjs.map +1 -0
- package/.output/server/chunks/build/monitor-DX_K0WMq.mjs +3 -2
- package/.output/server/chunks/build/{operations-OFHYXwh4.mjs → operations-BD6LK-Yz.mjs} +10 -8
- package/.output/server/chunks/build/operations-BD6LK-Yz.mjs.map +1 -0
- package/.output/server/chunks/build/{pages-CRMeXrxG.mjs → pages-DloBBvU5.mjs} +7 -6
- package/.output/server/chunks/build/pages-DloBBvU5.mjs.map +1 -0
- package/.output/server/chunks/build/permissions-BvmodvsO.mjs +3 -2
- package/.output/server/chunks/build/permissions-BvmodvsO.mjs.map +1 -1
- package/.output/server/chunks/build/plugins-NAS9MQ5r.mjs +3 -2
- package/.output/server/chunks/build/plugins-NAS9MQ5r.mjs.map +1 -1
- package/.output/server/chunks/build/schedules-D8vYHgQ5.mjs +2 -1
- package/.output/server/chunks/build/settings-B7HA-sdb.mjs +3 -2
- package/.output/server/chunks/build/settings-B7HA-sdb.mjs.map +1 -1
- package/.output/server/chunks/build/teams-wM-MdLv9.mjs +2 -1
- package/.output/server/chunks/build/teams-wM-MdLv9.mjs.map +1 -1
- package/.output/server/chunks/build/tokens-CloWk4x_.mjs +3 -2
- package/.output/server/chunks/build/tokens-CloWk4x_.mjs.map +1 -1
- package/.output/server/chunks/build/{town-BMlctE4m.mjs → town-B2gBu_ZE.mjs} +12 -9
- package/.output/server/chunks/build/town-B2gBu_ZE.mjs.map +1 -0
- package/.output/server/chunks/build/types-D6J7slEa.mjs +1 -1
- package/.output/server/chunks/build/useAgentHarnessOptions-BnFCh23W.mjs +2 -1
- package/.output/server/chunks/build/useAgentHarnessOptions-BnFCh23W.mjs.map +1 -1
- package/.output/server/chunks/build/useAgentTemplateActions-DsBRUQni.mjs +2 -1
- package/.output/server/chunks/build/useAgentTemplateActions-DsBRUQni.mjs.map +1 -1
- package/.output/server/chunks/build/useAgentTemplateDialogState-CZzpu5og.mjs +2 -1
- package/.output/server/chunks/build/useAgentTemplateDialogState-CZzpu5og.mjs.map +1 -1
- package/.output/server/chunks/build/useAgentTemplateForm-DzQ_t2Ue.mjs +2 -1
- package/.output/server/chunks/build/useAgentTemplateForm-DzQ_t2Ue.mjs.map +1 -1
- package/.output/server/chunks/build/useAgentTemplatesCatalog-Q7LgG1Af.mjs +3 -2
- package/.output/server/chunks/build/useAgentTemplatesCatalog-Q7LgG1Af.mjs.map +1 -1
- package/.output/server/chunks/build/{useAmlDatasets-BM0lZu40.mjs → useAmlDatasets-DeoE1idn.mjs} +5 -4
- package/.output/server/chunks/build/useAmlDatasets-DeoE1idn.mjs.map +1 -0
- package/.output/server/chunks/build/{useAmlEntities-BDQ8TmLL.mjs → useAmlEntities-BMLHU_39.mjs} +5 -4
- package/.output/server/chunks/build/useAmlEntities-BMLHU_39.mjs.map +1 -0
- package/.output/server/chunks/build/{useAmlEnv-DgTVwpqi.mjs → useAmlEnv-DdlyVzPu.mjs} +5 -4
- package/.output/server/chunks/build/useAmlEnv-DdlyVzPu.mjs.map +1 -0
- package/.output/server/chunks/build/{useAmlExperiments-BtyW32PO.mjs → useAmlExperiments-Dloi834i.mjs} +5 -4
- package/.output/server/chunks/build/useAmlExperiments-Dloi834i.mjs.map +1 -0
- package/.output/server/chunks/build/useAmlFormat-C2sl3MGB.mjs +2 -1
- package/.output/server/chunks/build/useAmlFormat-C2sl3MGB.mjs.map +1 -1
- package/.output/server/chunks/build/{useAmlJobs-fk-H5Rp5.mjs → useAmlJobs--a_1ovew.mjs} +5 -4
- package/.output/server/chunks/build/useAmlJobs--a_1ovew.mjs.map +1 -0
- package/.output/server/chunks/build/{useAmlModels-hgyVHoAq.mjs → useAmlModels-D7MuOWOy.mjs} +5 -4
- package/.output/server/chunks/build/useAmlModels-D7MuOWOy.mjs.map +1 -0
- package/.output/server/chunks/build/{useAmlNotes-BjbYNADm.mjs → useAmlNotes-CTZe-GI0.mjs} +5 -4
- package/.output/server/chunks/build/useAmlNotes-CTZe-GI0.mjs.map +1 -0
- package/.output/server/chunks/build/{useAmlPredict-U24-SZNA.mjs → useAmlPredict-BToRrVRV.mjs} +5 -4
- package/.output/server/chunks/build/useAmlPredict-BToRrVRV.mjs.map +1 -0
- package/.output/server/chunks/build/{useDaqAddNode-kW7uTSMQ.mjs → useDaqAddNode-CaOCbe4-.mjs} +6 -5
- package/.output/server/chunks/build/useDaqAddNode-CaOCbe4-.mjs.map +1 -0
- package/.output/server/chunks/build/{useDaqDetailBinding-cpBz4hSL.mjs → useDaqDetailBinding-C7AbGIdP.mjs} +6 -5
- package/.output/server/chunks/build/useDaqDetailBinding-C7AbGIdP.mjs.map +1 -0
- package/.output/server/chunks/build/{useDaqDetailFrames-BZGtKKXW.mjs → useDaqDetailFrames-CmAEdbAL.mjs} +5 -4
- package/.output/server/chunks/build/useDaqDetailFrames-CmAEdbAL.mjs.map +1 -0
- package/.output/server/chunks/build/{useDaqDetailHistory-DtSTfyMi.mjs → useDaqDetailHistory-pfi6zXWU.mjs} +5 -4
- package/.output/server/chunks/build/useDaqDetailHistory-pfi6zXWU.mjs.map +1 -0
- package/.output/server/chunks/build/{useDaqDetailNode-D_vhG0jF.mjs → useDaqDetailNode-qT7MjqJ7.mjs} +8 -7
- package/.output/server/chunks/build/useDaqDetailNode-qT7MjqJ7.mjs.map +1 -0
- package/.output/server/chunks/build/{useDaqDetailParams-JfqHvTxr.mjs → useDaqDetailParams-CrTMDs-2.mjs} +6 -5
- package/.output/server/chunks/build/useDaqDetailParams-CrTMDs-2.mjs.map +1 -0
- package/.output/server/chunks/build/{useDaqFilters-BUQtZ82a.mjs → useDaqFilters-CMysN13f.mjs} +8 -7
- package/.output/server/chunks/build/useDaqFilters-CMysN13f.mjs.map +1 -0
- package/.output/server/chunks/build/useDaqNodeWindow-1DWj2H5G.mjs +2 -1
- package/.output/server/chunks/build/useDaqNodeWindow-1DWj2H5G.mjs.map +1 -1
- package/.output/server/chunks/build/{useDaqOptimizations-Ct-TSXxy.mjs → useDaqOptimizations-Coq5lsfM.mjs} +5 -4
- package/.output/server/chunks/build/useDaqOptimizations-Coq5lsfM.mjs.map +1 -0
- package/.output/server/chunks/build/{useDaqStream-wOxZcMDA.mjs → useDaqStream-DhzdoyIR.mjs} +3 -3
- package/.output/server/chunks/build/{useDaqStream-wOxZcMDA.mjs.map → useDaqStream-DhzdoyIR.mjs.map} +1 -1
- package/.output/server/chunks/build/{useDaqTemplates-BqQRdrIm.mjs → useDaqTemplates-C7GzQmdJ.mjs} +6 -5
- package/.output/server/chunks/build/useDaqTemplates-C7GzQmdJ.mjs.map +1 -0
- package/.output/server/chunks/build/useDashboardCharts-D45083s_.mjs +2 -1
- package/.output/server/chunks/build/useDashboardCharts-D45083s_.mjs.map +1 -1
- package/.output/server/chunks/build/{useDashboardData-DWJ6vHjm.mjs → useDashboardData-DgJcGJaF.mjs} +6 -5
- package/.output/server/chunks/build/useDashboardData-DgJcGJaF.mjs.map +1 -0
- package/.output/server/chunks/build/{useDcwAddNode-C1HDP3yG.mjs → useDcwAddNode-C9DbEKHi.mjs} +38 -5
- package/.output/server/chunks/build/useDcwAddNode-C9DbEKHi.mjs.map +1 -0
- package/.output/server/chunks/build/{useDcwCards-ETEsHvVy.mjs → useDcwCards-VDoMYG7l.mjs} +5 -4
- package/.output/server/chunks/build/useDcwCards-VDoMYG7l.mjs.map +1 -0
- package/.output/server/chunks/build/{useDcwDetailScope-QTr1G6Oe.mjs → useDcwDetailScope-CL97tJdJ.mjs} +7 -6
- package/.output/server/chunks/build/useDcwDetailScope-CL97tJdJ.mjs.map +1 -0
- package/.output/server/chunks/build/{useDcwDetailTemplates-Djt-0Vse.mjs → useDcwDetailTemplates-OLmjMSGD.mjs} +5 -4
- package/.output/server/chunks/build/useDcwDetailTemplates-OLmjMSGD.mjs.map +1 -0
- package/.output/server/chunks/build/{useDcwFilter-FfVlDdyS.mjs → useDcwFilter-Bs9C6-h_.mjs} +5 -4
- package/.output/server/chunks/build/useDcwFilter-Bs9C6-h_.mjs.map +1 -0
- package/.output/server/chunks/build/{useDcwLedger-BLoMmcu1.mjs → useDcwLedger-Bbf_iFOY.mjs} +5 -4
- package/.output/server/chunks/build/useDcwLedger-Bbf_iFOY.mjs.map +1 -0
- package/.output/server/chunks/build/{useDcwLineMutations-BMC5BTWU.mjs → useDcwLineMutations-Bhtuqw7J.mjs} +5 -4
- package/.output/server/chunks/build/useDcwLineMutations-Bhtuqw7J.mjs.map +1 -0
- package/.output/server/chunks/build/{useDcwLineRun-74gN_s6T.mjs → useDcwLineRun-CGqZSnG4.mjs} +5 -4
- package/.output/server/chunks/build/useDcwLineRun-CGqZSnG4.mjs.map +1 -0
- package/.output/server/chunks/build/useDcwParamApprovals-BBwdFsKv.mjs +119 -0
- package/.output/server/chunks/build/useDcwParamApprovals-BBwdFsKv.mjs.map +1 -0
- package/.output/server/chunks/build/{useDcwProducts-D-zrMaeV.mjs → useDcwProducts-BoBkJqpv.mjs} +5 -4
- package/.output/server/chunks/build/useDcwProducts-BoBkJqpv.mjs.map +1 -0
- package/.output/server/chunks/build/{useDcwQuery-7tX4QYmv.mjs → useDcwQuery-DP7b2qb6.mjs} +5 -4
- package/.output/server/chunks/build/useDcwQuery-DP7b2qb6.mjs.map +1 -0
- package/.output/server/chunks/build/{useDcwQuickActions-C-tgcXIr.mjs → useDcwQuickActions-DHRiA9KN.mjs} +5 -4
- package/.output/server/chunks/build/useDcwQuickActions-DHRiA9KN.mjs.map +1 -0
- package/.output/server/chunks/build/{useDcwRecipes-FVk5gDLV.mjs → useDcwRecipes-CIMeH2oF.mjs} +5 -4
- package/.output/server/chunks/build/useDcwRecipes-CIMeH2oF.mjs.map +1 -0
- package/.output/server/chunks/build/{useDcwStream-D04kCV3J.mjs → useDcwStream-B9ugUWRq.mjs} +10 -3
- package/.output/server/chunks/build/{useDcwStream-D04kCV3J.mjs.map → useDcwStream-B9ugUWRq.mjs.map} +1 -1
- package/.output/server/chunks/build/{useDcwTemplates-LDZffy4u.mjs → useDcwTemplates-M_-qjV8E.mjs} +5 -4
- package/.output/server/chunks/build/useDcwTemplates-M_-qjV8E.mjs.map +1 -0
- package/.output/server/chunks/build/{useDcwWrites-B22mwliK.mjs → useDcwWrites-D94dAzqr.mjs} +5 -4
- package/.output/server/chunks/build/useDcwWrites-D94dAzqr.mjs.map +1 -0
- package/.output/server/chunks/build/{useDeviceTwins-CbVad1M3.mjs → useDeviceTwins-BqwVJaZg.mjs} +2 -2
- package/.output/server/chunks/build/{useDeviceTwins-CbVad1M3.mjs.map → useDeviceTwins-BqwVJaZg.mjs.map} +1 -1
- package/.output/server/chunks/build/useLogsFormat-B-o4MHy7.mjs +2 -1
- package/.output/server/chunks/build/useLogsFormat-B-o4MHy7.mjs.map +1 -1
- package/.output/server/chunks/build/{useLogsManual-COfCyUtj.mjs → useLogsManual-CMjD62nt.mjs} +5 -4
- package/.output/server/chunks/build/useLogsManual-CMjD62nt.mjs.map +1 -0
- package/.output/server/chunks/build/{useLogsQuery-CRAm2hmS.mjs → useLogsQuery-2x1mKxT1.mjs} +5 -4
- package/.output/server/chunks/build/useLogsQuery-2x1mKxT1.mjs.map +1 -0
- package/.output/server/chunks/build/{useLogsScope-ClNijVj4.mjs → useLogsScope-04cUJCU-.mjs} +5 -4
- package/.output/server/chunks/build/useLogsScope-04cUJCU-.mjs.map +1 -0
- package/.output/server/chunks/build/useMonitorColumns-DhYvkLDq.mjs +3 -2
- package/.output/server/chunks/build/useMonitorColumns-DhYvkLDq.mjs.map +1 -1
- package/.output/server/chunks/build/useMonitorData-guVjMDtR.mjs +3 -2
- package/.output/server/chunks/build/useMonitorData-guVjMDtR.mjs.map +1 -1
- package/.output/server/chunks/build/useMonitorFormat-C7lhZe4g.mjs +2 -1
- package/.output/server/chunks/build/useMonitorFormat-C7lhZe4g.mjs.map +1 -1
- package/.output/server/chunks/build/useMonitorTerminal-Dj4QwRNW.mjs +2 -1
- package/.output/server/chunks/build/useMonitorTerminal-Dj4QwRNW.mjs.map +1 -1
- package/.output/server/chunks/build/{useOperationsFeed-CeXeHqUK.mjs → useOperationsFeed-DsA2ym7M.mjs} +5 -4
- package/.output/server/chunks/build/useOperationsFeed-DsA2ym7M.mjs.map +1 -0
- package/.output/server/chunks/build/{useOpsLog-CgnNG7_n.mjs → useOpsLog-SnWPuRtK.mjs} +2 -2
- package/.output/server/chunks/build/{useOpsLog-CgnNG7_n.mjs.map → useOpsLog-SnWPuRtK.mjs.map} +1 -1
- package/.output/server/chunks/build/useTeamActions-BOLQkYxg.mjs +2 -1
- package/.output/server/chunks/build/useTeamActions-BOLQkYxg.mjs.map +1 -1
- package/.output/server/chunks/build/useTeamAddMemberDialog-BCgrLPxI.mjs +2 -1
- package/.output/server/chunks/build/useTeamAddMemberDialog-BCgrLPxI.mjs.map +1 -1
- package/.output/server/chunks/build/useTeamCreateDialog-CJk40LqS.mjs +2 -1
- package/.output/server/chunks/build/useTeamCreateDialog-CJk40LqS.mjs.map +1 -1
- package/.output/server/chunks/build/useTeamDeployDialog-49hdUXQP.mjs +2 -1
- package/.output/server/chunks/build/useTeamDeployDialog-49hdUXQP.mjs.map +1 -1
- package/.output/server/chunks/build/useTeamDialogState-CFRUQxAf.mjs +2 -1
- package/.output/server/chunks/build/useTeamDialogState-CFRUQxAf.mjs.map +1 -1
- package/.output/server/chunks/build/useTeamPluginDialog-Dh-QOoiU.mjs +2 -1
- package/.output/server/chunks/build/useTeamPluginDialog-Dh-QOoiU.mjs.map +1 -1
- package/.output/server/chunks/build/useTeamsCatalog-HBSyKt5P.mjs +3 -2
- package/.output/server/chunks/build/useTeamsCatalog-HBSyKt5P.mjs.map +1 -1
- package/.output/server/chunks/build/useTokenClipboard-CwQpoFeP.mjs +2 -1
- package/.output/server/chunks/build/useTokenClipboard-CwQpoFeP.mjs.map +1 -1
- package/.output/server/chunks/build/useTokenCreate-DkYvEQUD.mjs +3 -2
- package/.output/server/chunks/build/useTokenCreate-DkYvEQUD.mjs.map +1 -1
- package/.output/server/chunks/build/useTokenRename-DOCP4aeI.mjs +3 -2
- package/.output/server/chunks/build/useTokenRename-DOCP4aeI.mjs.map +1 -1
- package/.output/server/chunks/build/useTokenReveal-CybwwflV.mjs +3 -2
- package/.output/server/chunks/build/useTokenReveal-CybwwflV.mjs.map +1 -1
- package/.output/server/chunks/build/useTokensList-BLiMvrc4.mjs +3 -2
- package/.output/server/chunks/build/useTokensList-BLiMvrc4.mjs.map +1 -1
- package/.output/server/chunks/build/useWorkbenchAuth-DqjBX-6w.mjs +3 -2
- package/.output/server/chunks/build/useWorkbenchAuth-DqjBX-6w.mjs.map +1 -1
- package/.output/server/chunks/build/{useWorkbenchWorkspaces-DgiSCzsX.mjs → useWorkbenchWorkspaces-GQVU9BLv.mjs} +6 -4
- package/.output/server/chunks/build/useWorkbenchWorkspaces-GQVU9BLv.mjs.map +1 -0
- package/.output/server/chunks/build/useWorkshopApi-C9sTYu1F.mjs +1 -1
- package/.output/server/chunks/build/{useWorkshopWs-Bm80bLn7.mjs → useWorkshopWs-CgeCsaYJ.mjs} +4 -128
- package/.output/server/chunks/build/useWorkshopWs-CgeCsaYJ.mjs.map +1 -0
- package/.output/server/chunks/build/useWorkspaceAuth-Dlvj9csD.mjs +3 -2
- package/.output/server/chunks/build/useWorkspaceAuth-Dlvj9csD.mjs.map +1 -1
- package/.output/server/chunks/build/{useWorkspaceChannels-D61Al2dr.mjs → useWorkspaceChannels-B13vROC1.mjs} +5 -3
- package/.output/server/chunks/build/useWorkspaceChannels-B13vROC1.mjs.map +1 -0
- package/.output/server/chunks/build/useWorkspacePanels-CTwREmq0.mjs +2 -1
- package/.output/server/chunks/build/useWorkspacePanels-CTwREmq0.mjs.map +1 -1
- package/.output/server/chunks/build/useWorkspaceShell-BCypjjjE.mjs +2 -1
- package/.output/server/chunks/build/useWorkspaceShell-BCypjjjE.mjs.map +1 -1
- package/.output/server/chunks/build/users-CCf5PgRs.mjs +3 -2
- package/.output/server/chunks/build/users-CCf5PgRs.mjs.map +1 -1
- package/.output/server/chunks/build/{workshop-FQ4YzooB.mjs → workshop-BDqWzJtr.mjs} +6 -4
- package/.output/server/chunks/build/workshop-BDqWzJtr.mjs.map +1 -0
- package/.output/server/chunks/build/workspaces-CmW0cpOt.mjs +1 -1
- package/.output/server/chunks/routes/api/health.get.mjs +2 -1
- package/.output/server/chunks/routes/api/health.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.get.mjs +2 -1
- package/.output/server/chunks/routes/api/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.post.mjs +2 -1
- package/.output/server/chunks/routes/api/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/mcp/workshop.mjs +3 -2
- package/.output/server/chunks/routes/api/mcp/workshop.mjs.map +1 -1
- package/.output/server/chunks/routes/api/metrics.mjs +2 -1
- package/.output/server/chunks/routes/api/metrics.mjs.map +1 -1
- package/.output/server/chunks/routes/api/plugins/_name/_...path_.mjs +2 -1
- package/.output/server/chunks/routes/api/plugins/_name/_...path_.mjs.map +1 -1
- package/.output/server/chunks/routes/api/plugins/client/_name_.get.mjs +2 -1
- package/.output/server/chunks/routes/api/plugins/client/_name_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/plugins/i18n.get.mjs +2 -1
- package/.output/server/chunks/routes/api/plugins/i18n.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/plugins/manifest.get.mjs +2 -1
- package/.output/server/chunks/routes/api/plugins/manifest.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/backup/list.get.mjs +2 -1
- package/.output/server/chunks/routes/api/system/backup/list.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/backup/run.post.mjs +4 -3
- package/.output/server/chunks/routes/api/system/backup/run.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/config-groups/_id_.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/system/config-groups/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/config-groups/_id_.patch.mjs +2 -1
- package/.output/server/chunks/routes/api/system/config-groups/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/config.get.mjs +2 -1
- package/.output/server/chunks/routes/api/system/config.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/index.get.mjs +2 -1
- package/.output/server/chunks/routes/api/system/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/index.patch.mjs +2 -1
- package/.output/server/chunks/routes/api/system/index.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/index.post.mjs +2 -1
- package/.output/server/chunks/routes/api/system/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/index2.get.mjs +2 -1
- package/.output/server/chunks/routes/api/system/index2.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/monitor/terminal/ws.mjs +2 -1
- package/.output/server/chunks/routes/api/system/monitor/terminal/ws.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/monitor/terminate.post.mjs +2 -1
- package/.output/server/chunks/routes/api/system/monitor/terminate.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/monitor.get.mjs +2 -1
- package/.output/server/chunks/routes/api/system/monitor.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/settings/events.get.mjs +2 -1
- package/.output/server/chunks/routes/api/system/settings/events.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/settings/reset.post.mjs +2 -1
- package/.output/server/chunks/routes/api/system/settings/reset.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/timezone.get.mjs +2 -1
- package/.output/server/chunks/routes/api/system/timezone.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/_id_.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/users/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/_id_.get.mjs +2 -1
- package/.output/server/chunks/routes/api/users/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/_id_.put.mjs +2 -1
- package/.output/server/chunks/routes/api/users/_id_.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/index.get.mjs +2 -1
- package/.output/server/chunks/routes/api/users/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/index.post.mjs +2 -1
- package/.output/server/chunks/routes/api/users/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/login.post.mjs +2 -1
- package/.output/server/chunks/routes/api/users/login.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/logout.post.mjs +2 -1
- package/.output/server/chunks/routes/api/users/logout.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/me.get.mjs +2 -1
- package/.output/server/chunks/routes/api/users/me.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/register.post.mjs +2 -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 +2 -1
- package/.output/server/chunks/routes/api/users/setup-status.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/tokens/_id/token.get.mjs +2 -1
- package/.output/server/chunks/routes/api/users/tokens/_id/token.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/tokens/_id_.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/users/tokens/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/tokens/_id_.patch.mjs +2 -1
- package/.output/server/chunks/routes/api/users/tokens/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/_...path_.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/_...path_.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.post.mjs +2 -1
- 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 +2 -1
- package/.output/server/chunks/routes/api/workshop/a2a/send.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/approvals/_id/decide.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/approvals/_id/decide.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.patch.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/grant.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/grant.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/revoke.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/revoke.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/index.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/index.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/index2.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/index2.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/invoke.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/invoke.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/list.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/list.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/agents/_id_.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/agents/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/agents/_id_.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/agents/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/agents/_id_.patch.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/agents/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/agents/subscribe.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/agents/subscribe.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/datasets/_id/preview.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/datasets/_id/preview.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.patch.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/entities/prune.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/entities/prune.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/env/recheck.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/env/recheck.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/env/uv.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/env/uv.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/env/venv.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/env/venv.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/index.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/index.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/index2.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/index2.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/index2.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/index2.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/index3.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/index3.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/index3.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/index3.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/index4.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/index4.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/index5.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/index5.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/index6.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/index6.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/index7.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/index7.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/cancel.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/cancel.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/logs.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/logs.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/retry.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/retry.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/jobs/_id_.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/jobs/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/jobs/_id_.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/jobs/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/models/_id/predict.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/models/_id/predict.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/models/_id/promote.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/models/_id/promote.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/models/_id_.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/models/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/models/_id_.patch.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/models/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id/train.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id/train.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id_.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id_.patch.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/twin/providers.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/twin/providers.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/approvals/_id/decide.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/approvals/_id/decide.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/assets/character/_id_.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/assets/character/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/assets/devices/_id_.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/assets/devices/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/assets/index.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/assets/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/assets/index.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/assets/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/assets/index2.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/assets/index2.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/assets/index2.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/assets/index2.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/audit.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/audit.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/caller.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/caller.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channel-templates/_id/instantiate.post.mjs +3 -2
- 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_.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.patch.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channel-templates/from-channel.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channel-templates/from-channel.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/activate.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/activate.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/_memoryId_.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/_memoryId_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/search.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/search.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/model.patch.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/model.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/position.patch.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/position.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/range.patch.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/range.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/stop.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/stop.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.patch.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/chat/index.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/chat/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/chat/index.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/chat/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/chat/messages/_messageId/read.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/chat/messages/_messageId/read.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/chat/permissions.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/chat/permissions.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/events.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/events.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index.put.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index2.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index2.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index2.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index2.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index3.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index3.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index3.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index3.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index4.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index4.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index4.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index4.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index5.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index5.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index6.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index6.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/line.put.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/line.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/members/_userId/approve.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/members/_userId/approve.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/members/_userId_.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/members/_userId_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/members/join.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/members/join.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/members/leave.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/members/leave.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/memories/_memoryId_.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/memories/_memoryId_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/queue.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/queue.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/terminals.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/terminals.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/twin-profile.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/twin-profile.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/twin-profile.patch.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/twin-profile.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id_.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/index.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/index.patch.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/index.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels.post.mjs +5 -4
- package/.output/server/chunks/routes/api/workshop/channels.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id/bind.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id/bind.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id/bindings.put.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id/bindings.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id/frames/content.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id/frames/content.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id/frames.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id/frames.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id/samples.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id/samples.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id/test.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id/test.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id_.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id_.patch.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/alarms/_id/ack.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/daq/alarms/_id/ack.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/alarms.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/daq/alarms.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/controller.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/daq/controller.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/index.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/daq/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/infra/reconnect.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/daq/infra/reconnect.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/infra.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/daq/infra.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.patch.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/test-driver.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/daq/test-driver.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id/bind.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id/bind.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id/bindings.put.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id/bindings.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id/param-ledger.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id/param-ledger.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id/read.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id/read.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id/test.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id/test.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id/write.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id/write.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id_.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id_.patch.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/controller.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/controller.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index2.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index2.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index2.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index2.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index3.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index3.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index3.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index3.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index4.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index4.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index4.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index4.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index5.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index5.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index5.post.mjs +3 -2
- package/.output/server/chunks/routes/api/workshop/dcw/index5.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index6.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index6.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/journal/node/_nodeId/rollback.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/journal/node/_nodeId/rollback.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/line/query.get.mjs +2 -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 +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/start.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/stop.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/stop.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.patch.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/mes-test-read.post.mjs +36 -0
- package/.output/server/chunks/routes/api/workshop/dcw/mes-test-read.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/judge.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/judge.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/rollback.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/rollback.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/series.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/series.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id_.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id/read.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id/read.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id/write.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id/write.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.delete.mjs +3 -2
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.patch.mjs +3 -2
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.patch.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/apply.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/apply.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/mark-good.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/mark-good.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/revert.post.mjs +2 -1
- 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 +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/rollback-good.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/versions.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/versions.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/index.patch.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/index.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/close.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/close.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/data.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/data.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/rollback.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/rollback.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.delete.mjs +3 -2
- package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.patch.mjs +3 -2
- package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/test-driver.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/test-driver.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/device-twins/_id/control.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/device-twins/_id/control.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/device-twins/_id/telemetry.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/device-twins/_id/telemetry.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/device-twins/_id_.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/device-twins/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/device-twins/_id_.patch.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/device-twins/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/fs/dirs.get.mjs +3 -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 +3 -2
- package/.output/server/chunks/routes/api/workshop/harnesses/_id/providers.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/harnesses.get.mjs +3 -2
- package/.output/server/chunks/routes/api/workshop/harnesses.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/hitl/pending.get.mjs +3 -2
- package/.output/server/chunks/routes/api/workshop/hitl/pending.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/hitl/respond.post.mjs +3 -2
- package/.output/server/chunks/routes/api/workshop/hitl/respond.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index.put.mjs +3 -2
- package/.output/server/chunks/routes/api/workshop/index.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index10.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/index10.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index11.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/index11.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index12.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/index12.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index13.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/index13.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index14.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/index14.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index2.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/index2.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index2.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/index2.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index3.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/index3.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index3.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/index3.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index4.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/index4.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index4.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/index4.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index5.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/index5.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index5.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/index5.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index6.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/index6.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index6.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/index6.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index7.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/index7.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index7.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/index7.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index8.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/index8.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index8.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/index8.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index9.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/index9.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index9.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/index9.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/mailbox/all.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/mailbox/all.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/mailbox.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/mailbox.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/memories/maintenance.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/memories/maintenance.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/notifications/read.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/notifications/read.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/plugins/_name/disable.post.mjs +3 -2
- package/.output/server/chunks/routes/api/workshop/plugins/_name/disable.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/plugins/_name/enable.post.mjs +3 -2
- package/.output/server/chunks/routes/api/workshop/plugins/_name/enable.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/plugins/index.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/plugins/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/runtime.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/runtime.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.delete.mjs +3 -2
- package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.put.mjs +3 -2
- package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/scene/layouts.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/scene/layouts.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/schedules/_id/run.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/schedules/_id/run.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/schedules/_id/runs.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/schedules/_id/runs.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/schedules/_id_.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/schedules/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/schedules/_id_.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/schedules/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/schedules/_id_.patch.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/schedules/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id/complete.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id/complete.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id/dispatch.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id/dispatch.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id/index.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id/reassign.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id/reassign.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id/report.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id/report.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id/retry.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id/retry.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id/update.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id/update.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id_.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/tasks.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id/deploy.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id/deploy.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id/index.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id/index.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id/index.put.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id/index.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id/index2.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id/index2.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id/members/_agentId_.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id/members/_agentId_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id_.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id_.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id_.patch.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/users/me.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/users/me.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/users/register.post.mjs +2 -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 +3 -2
- package/.output/server/chunks/routes/api/workshop/workspaces/_id/channel-templates/_tplId_.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/workspaces/index.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/workspaces/index.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/renderer.mjs +2 -2
- package/.output/server/chunks/virtual/entry.mjs +90 -57
- package/.output/server/chunks/virtual/precomputed.mjs +1 -1
- package/.output/server/index.mjs +2 -1
- package/.output/server/index.mjs.map +1 -1
- package/.output/server/package.json +1 -1
- package/README-zh.md +3 -3
- package/README.md +5 -5
- package/app/components/dcw/DcwAddNodeModal.vue +54 -4
- package/app/components/dcw/DcwNodesTable.vue +15 -0
- package/app/components/dcw/DcwParamApprovalCard.vue +110 -0
- package/app/components/dcw/DcwRecipeEditModal.vue +10 -1
- package/app/components/workshop/town/components/TownAgentBindings.vue +10 -1
- package/app/composables/workshop/useDcwStream.ts +4 -0
- package/app/pages/dcw/[id].vue +19 -1
- package/app/pages/dcw/composables/useDcwAddNode.ts +35 -1
- package/app/pages/dcw/composables/useDcwParamApprovals.ts +119 -0
- package/app/utils/dcw-driver-badge.ts +16 -0
- package/docs/cli.en.md +1 -1
- package/i18n/locales/en.ts +14 -0
- package/i18n/locales/zh-CN.ts +14 -0
- package/package.json +1 -1
- package/scripts/_dbg-protocol-matrix.mjs +8 -1
- package/server/api/workshop/dcw/mes-test-read.post.ts +24 -0
- package/server/plugins/workshop.ts +4 -0
- package/server/services/workshop/agents/host-tool-bridge/tools/industrial.ts +7 -3
- package/server/services/workshop/agents/industrial/index.ts +2 -0
- package/server/services/workshop/agents/industrial/mes-tools.ts +135 -0
- package/server/services/workshop/agents/industrial/ops-tools.ts +79 -8
- package/server/services/workshop/agents/industrial-context.ts +19 -0
- package/server/services/workshop/agents/tool-classes.ts +10 -0
- package/server/services/workshop/db/database/schema.ts +32 -0
- package/server/services/workshop/db/schema.sql +32 -0
- package/server/services/workshop/dcw/dcw-controller/recipes.ts +9 -6
- package/server/services/workshop/dcw/dcw-recipe.repo.ts +8 -2
- package/server/services/workshop/dcw/drivers/mes-rest.ts +543 -0
- package/server/services/workshop/dcw/drivers/registry.ts +2 -0
- package/server/services/workshop/dcw/drivers/shared.ts +30 -0
- package/server/services/workshop/mes/mes-controller.ts +410 -0
- package/server/services/workshop/mes/mes-datasets.ts +441 -0
- package/server/services/workshop/runtime/manager/state.ts +11 -0
- package/server/services/workshop/runtime/scheduler-loop/tick.ts +5 -1
- package/server/services/workshop/runtime/task-engine/helpers.ts +3 -1
- package/shared/config/schema.json +2 -1
- package/shared/daq-protocol.ts +2 -1
- package/shared/dcw-protocol/catalog.ts +25 -1
- package/.output/public/_nuxt/BUD1CNvB2.js +0 -1
- package/.output/public/_nuxt/BhlRInVa.js +0 -1
- package/.output/public/_nuxt/CR-ILcRu2.js +0 -1
- package/.output/public/_nuxt/CZLnEnbE.js +0 -14
- package/.output/public/_nuxt/Chxx-DIE2.js +0 -1
- package/.output/public/_nuxt/D6lZftfy.js +0 -1
- package/.output/public/_nuxt/DAGuPgXa.js +0 -2
- package/.output/public/_nuxt/DWsgRq2c.js +0 -1
- package/.output/public/_nuxt/DxagrjB8.js +0 -1
- package/.output/public/_nuxt/UN3nSFjj2.js +0 -1
- package/.output/public/_nuxt/Z-Z6EhXs.js +0 -1
- package/.output/public/_nuxt/_id_.rdGx-UDx.css +0 -1
- package/.output/public/_nuxt/_kUzq9VF.js +0 -1
- package/.output/public/_nuxt/builds/meta/5ccc21c2-aba0-4b63-9a13-410e0569e345.json +0 -1
- package/.output/public/_nuxt/o9rJf00k.js +0 -1
- package/.output/server/chunks/build/TownView-fP9BiALv.mjs.map +0 -1
- package/.output/server/chunks/build/_id_-CDlur81q.mjs.map +0 -1
- package/.output/server/chunks/build/_id_-CK-QFrDV.mjs.map +0 -1
- package/.output/server/chunks/build/aml-DsgtDLWF.mjs.map +0 -1
- package/.output/server/chunks/build/api-BY6ji7RC.mjs.map +0 -1
- package/.output/server/chunks/build/apiClient-D281qrK2.mjs.map +0 -1
- package/.output/server/chunks/build/daq-N69AOtgw.mjs.map +0 -1
- package/.output/server/chunks/build/dcw-CN9d3Rs7.mjs.map +0 -1
- package/.output/server/chunks/build/logs-BcAjU1Ps.mjs.map +0 -1
- package/.output/server/chunks/build/operations-OFHYXwh4.mjs.map +0 -1
- package/.output/server/chunks/build/pages-CRMeXrxG.mjs.map +0 -1
- package/.output/server/chunks/build/town-BMlctE4m.mjs.map +0 -1
- package/.output/server/chunks/build/useAmlDatasets-BM0lZu40.mjs.map +0 -1
- package/.output/server/chunks/build/useAmlEntities-BDQ8TmLL.mjs.map +0 -1
- package/.output/server/chunks/build/useAmlEnv-DgTVwpqi.mjs.map +0 -1
- package/.output/server/chunks/build/useAmlExperiments-BtyW32PO.mjs.map +0 -1
- package/.output/server/chunks/build/useAmlJobs-fk-H5Rp5.mjs.map +0 -1
- package/.output/server/chunks/build/useAmlModels-hgyVHoAq.mjs.map +0 -1
- package/.output/server/chunks/build/useAmlNotes-BjbYNADm.mjs.map +0 -1
- package/.output/server/chunks/build/useAmlPredict-U24-SZNA.mjs.map +0 -1
- package/.output/server/chunks/build/useDaqAddNode-kW7uTSMQ.mjs.map +0 -1
- package/.output/server/chunks/build/useDaqDetailBinding-cpBz4hSL.mjs.map +0 -1
- package/.output/server/chunks/build/useDaqDetailFrames-BZGtKKXW.mjs.map +0 -1
- package/.output/server/chunks/build/useDaqDetailHistory-DtSTfyMi.mjs.map +0 -1
- package/.output/server/chunks/build/useDaqDetailNode-D_vhG0jF.mjs.map +0 -1
- package/.output/server/chunks/build/useDaqDetailParams-JfqHvTxr.mjs.map +0 -1
- package/.output/server/chunks/build/useDaqFilters-BUQtZ82a.mjs.map +0 -1
- package/.output/server/chunks/build/useDaqOptimizations-Ct-TSXxy.mjs.map +0 -1
- package/.output/server/chunks/build/useDaqTemplates-BqQRdrIm.mjs.map +0 -1
- package/.output/server/chunks/build/useDashboardData-DWJ6vHjm.mjs.map +0 -1
- package/.output/server/chunks/build/useDcwAddNode-C1HDP3yG.mjs.map +0 -1
- package/.output/server/chunks/build/useDcwCards-ETEsHvVy.mjs.map +0 -1
- package/.output/server/chunks/build/useDcwDetailScope-QTr1G6Oe.mjs.map +0 -1
- package/.output/server/chunks/build/useDcwDetailTemplates-Djt-0Vse.mjs.map +0 -1
- package/.output/server/chunks/build/useDcwFilter-FfVlDdyS.mjs.map +0 -1
- package/.output/server/chunks/build/useDcwLedger-BLoMmcu1.mjs.map +0 -1
- package/.output/server/chunks/build/useDcwLineMutations-BMC5BTWU.mjs.map +0 -1
- package/.output/server/chunks/build/useDcwLineRun-74gN_s6T.mjs.map +0 -1
- package/.output/server/chunks/build/useDcwProducts-D-zrMaeV.mjs.map +0 -1
- package/.output/server/chunks/build/useDcwQuery-7tX4QYmv.mjs.map +0 -1
- package/.output/server/chunks/build/useDcwQuickActions-C-tgcXIr.mjs.map +0 -1
- package/.output/server/chunks/build/useDcwRecipes-FVk5gDLV.mjs.map +0 -1
- package/.output/server/chunks/build/useDcwTemplates-LDZffy4u.mjs.map +0 -1
- package/.output/server/chunks/build/useDcwWrites-B22mwliK.mjs.map +0 -1
- package/.output/server/chunks/build/useLogsManual-COfCyUtj.mjs.map +0 -1
- package/.output/server/chunks/build/useLogsQuery-CRAm2hmS.mjs.map +0 -1
- package/.output/server/chunks/build/useLogsScope-ClNijVj4.mjs.map +0 -1
- package/.output/server/chunks/build/useOperationsFeed-CeXeHqUK.mjs.map +0 -1
- package/.output/server/chunks/build/useWorkbenchWorkspaces-DgiSCzsX.mjs.map +0 -1
- package/.output/server/chunks/build/useWorkshopWs-Bm80bLn7.mjs.map +0 -1
- package/.output/server/chunks/build/useWorkspaceChannels-D61Al2dr.mjs.map +0 -1
- package/.output/server/chunks/build/workshop-FQ4YzooB.mjs.map +0 -1
- /package/.output/public/_nuxt/{C4sQKuhk2.js → C4sQKuhk.js} +0 -0
- /package/.output/public/_nuxt/{Dep0Hc9w.js → Dep0Hc9w2.js} +0 -0
- /package/.output/public/_nuxt/{DmzmgYHb.js → DmzmgYHb2.js} +0 -0
- /package/.output/public/_nuxt/{BvRk9kiK2.js → DybRo6-H.js} +0 -0
- /package/.output/public/_nuxt/{aV6YPjg0.js → aV6YPjg02.js} +0 -0
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { computed, onUnmounted, ref } from 'vue'
|
|
2
|
+
import { apiFetch } from '~/composables/workshop/apiClient'
|
|
3
|
+
import { useDcwStream } from '~/composables/workshop/useDcwStream'
|
|
4
|
+
import { useHitlStore } from '~/stores/workshop/hitl'
|
|
5
|
+
import type { useDcwDetailScope } from './useDcwDetailScope'
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* HITL 下发参数审批(产线详情页卡)—— 本产线控制节点的 Agent 写入待批项。
|
|
9
|
+
*
|
|
10
|
+
* 数据源(GET /api/workshop/agent-tools/approvals?scope=pending,服务端已按
|
|
11
|
+
* Channel 可见性 + 审批资格 fail-closed 过滤):行载荷带 nodeId/expiresAt,
|
|
12
|
+
* ① kind='dcw' 只留下发审批;② nodeId ∈ 本产线节点 —— 精确过滤到当前产线
|
|
13
|
+
* (hitl/pending 的 AepHitlItem 无结构化 nodeId,故不作数据源)。
|
|
14
|
+
* 发起者名以全局 HITL store(dcw-approval 条目)补全,缺失回退 agentId。
|
|
15
|
+
* 裁决走既有 POST /agent-tools/approvals/:id/decide(approved + comment,
|
|
16
|
+
* 拒绝意见逐字回流 Agent);30s 轮询 + 裁决后立即刷新;空态由页面 v-if 收敛整卡。
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
/** 审批行(GET approvals 返回 ToolApproval 的客户端投影;只取用到的字段) */
|
|
20
|
+
export interface DcwApprovalRow {
|
|
21
|
+
id: string
|
|
22
|
+
agentId: string
|
|
23
|
+
kind: string
|
|
24
|
+
nodeId: string
|
|
25
|
+
/** 人读摘要(节点/物理量/当前值→目标值/步长依据,服务端生成,有什么展示什么) */
|
|
26
|
+
detail: string
|
|
27
|
+
createdAt: string
|
|
28
|
+
/** 到期时刻(超时默认不同意) */
|
|
29
|
+
expiresAt: string
|
|
30
|
+
status: string
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export function useDcwParamApprovals(scope: ReturnType<typeof useDcwDetailScope>) {
|
|
34
|
+
const dcw = useDcwStream()
|
|
35
|
+
const hitl = useHitlStore()
|
|
36
|
+
const { lineNodes } = scope
|
|
37
|
+
|
|
38
|
+
const items = ref<DcwApprovalRow[]>([])
|
|
39
|
+
/** 逐审批拒绝意见输入(经 v-model 下发卡片;decide 时随 rejected 提交) */
|
|
40
|
+
const comments = ref<Record<string, string>>({})
|
|
41
|
+
const decidingId = ref('')
|
|
42
|
+
/** 1s 心跳(倒计时用;读取它的渲染在每秒重算剩余秒数) */
|
|
43
|
+
const nowMs = ref(Date.now())
|
|
44
|
+
|
|
45
|
+
/** 本产线可见待批(服务端已过滤权限;这里只做产线与类型收窄) */
|
|
46
|
+
const approvalItems = computed<DcwApprovalRow[]>(() => {
|
|
47
|
+
const ids = new Set(lineNodes.value.map(n => n.id))
|
|
48
|
+
return items.value.filter(a => a.kind === 'dcw' && ids.has(a.nodeId) && a.status === 'pending')
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
/** 发起者名(HITL 统一待办的 agentName 优先;缺失回退 agentId) */
|
|
52
|
+
function approvalAgentName(a: DcwApprovalRow): string {
|
|
53
|
+
return hitl.items.find(i => i.kind === 'dcw-approval' && i.id === a.id)?.agentName ?? a.agentId
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/** 审批目标节点名(节点已删除时回退短 id) */
|
|
57
|
+
function approvalNodeName(a: DcwApprovalRow): string {
|
|
58
|
+
return dcw.nodeById(a.nodeId)?.name ?? a.nodeId.slice(0, 8)
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/** 剩余秒数(读取 nowMs 心跳;超时默认不同意) */
|
|
62
|
+
function approvalRemainingSec(a: DcwApprovalRow): number {
|
|
63
|
+
return Math.max(0, Math.ceil((Date.parse(a.expiresAt) - nowMs.value) / 1000))
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
async function load(): Promise<void> {
|
|
67
|
+
try {
|
|
68
|
+
const r = await apiFetch<{ approvals?: DcwApprovalRow[] }>({ base: '/api/workshop/agent-tools/approvals', path: '?scope=pending' })
|
|
69
|
+
items.value = r.approvals ?? []
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
// 轮询失败保持既有数据(空态不渲染整卡,不打扰产线操作台)
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/** 裁决:approved=true 立即执行;false 拒绝(意见逐字回流 Agent)。成功/冲突后立即刷新 */
|
|
77
|
+
async function decideApproval(id: string, approved: boolean): Promise<void> {
|
|
78
|
+
decidingId.value = id
|
|
79
|
+
try {
|
|
80
|
+
await apiFetch({
|
|
81
|
+
base: '/api/workshop/agent-tools/approvals',
|
|
82
|
+
path: `/${encodeURIComponent(id)}/decide`,
|
|
83
|
+
init: { method: 'POST', body: JSON.stringify({ approved, comment: comments.value[id] ?? '' }) },
|
|
84
|
+
})
|
|
85
|
+
items.value = items.value.filter(a => a.id !== id)
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
// 409 ALREADY_RESOLVED(他人已处理/超时)等:以服务端事实源收敛
|
|
89
|
+
}
|
|
90
|
+
finally {
|
|
91
|
+
Reflect.deleteProperty(comments.value, id)
|
|
92
|
+
decidingId.value = ''
|
|
93
|
+
await load()
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// 30s 数据轮询 + 1s 倒计时心跳(同一定时器计数,避免双计时器漂移)
|
|
98
|
+
let tick = 0
|
|
99
|
+
const timer = setInterval(() => {
|
|
100
|
+
nowMs.value = Date.now()
|
|
101
|
+
tick++
|
|
102
|
+
if (tick % 30 === 0) void load()
|
|
103
|
+
}, 1000)
|
|
104
|
+
onUnmounted(() => clearInterval(timer))
|
|
105
|
+
|
|
106
|
+
void load()
|
|
107
|
+
// 发起者名依赖全局 HITL 待办快照(幂等;挂载基线对齐,后续由 AEP hitl.* 帧增量收敛)
|
|
108
|
+
void hitl.loadSnapshot()
|
|
109
|
+
|
|
110
|
+
return {
|
|
111
|
+
approvalItems,
|
|
112
|
+
approvalComments: comments,
|
|
113
|
+
approvalDecidingId: decidingId,
|
|
114
|
+
approvalRemainingSec,
|
|
115
|
+
approvalAgentName,
|
|
116
|
+
approvalNodeName,
|
|
117
|
+
decideApproval,
|
|
118
|
+
}
|
|
119
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DCW 驱动边缘层徽标 —— 节点表 / 数据绑定节点选择处共用的极简语义标注。
|
|
3
|
+
*
|
|
4
|
+
* 只给"非自明"的驱动加徽标:
|
|
5
|
+
* - mes-rest → MES 边缘层(写控制经 MES REST 边缘链路,协议名不自明);
|
|
6
|
+
* - mock / s7-stub → 无协议转换(模拟/桩源,提醒其非真实产线链路);
|
|
7
|
+
* - modbus/opcua/mqtt/http 等真实协议驱动 → 协议名自明,不加徽标。
|
|
8
|
+
*
|
|
9
|
+
* driver 形参放宽为 string:'mes-rest'/'s7-stub' 枚举由后端驱动目录并行加入
|
|
10
|
+
* DcwDriverKind,字面量比较在合入前后均类型安全(避免与未合入的联合类型比对报错)。
|
|
11
|
+
*/
|
|
12
|
+
export function dcwDriverBadgeKey(driver: string): 'dcwDetail.drvBadgeMes' | 'dcwDetail.drvBadgeNoConv' | null {
|
|
13
|
+
if (driver === 'mes-rest') return 'dcwDetail.drvBadgeMes'
|
|
14
|
+
if (driver === 'mock' || driver === 's7-stub') return 'dcwDetail.drvBadgeNoConv'
|
|
15
|
+
return null
|
|
16
|
+
}
|
package/docs/cli.en.md
CHANGED
|
@@ -167,7 +167,7 @@ are never overwritten:
|
|
|
167
167
|
- Precedence (the CLI, the web settings page and the dev/prod launch scripts all share one engine,
|
|
168
168
|
`shared/config/engine.mjs`):
|
|
169
169
|
`config.yml defaults < runtime-settings.json runtime overrides < environment variables / explicit CLI flags`.
|
|
170
|
-
- There are **
|
|
170
|
+
- There are **116 setting descriptors across 18 groups** (`aw config list` prints exactly 113 rows):
|
|
171
171
|
|
|
172
172
|
| Group | Count | Group | Count | Group | Count | Group | Count |
|
|
173
173
|
|---|---|---|---|---|---|---|---|
|
package/i18n/locales/en.ts
CHANGED
|
@@ -300,6 +300,8 @@ export default {
|
|
|
300
300
|
approvalGate: 'Dual approval for high-risk ops',
|
|
301
301
|
allowRegistration: 'Open self-service registration',
|
|
302
302
|
hstsEnabled: 'Send HSTS header',
|
|
303
|
+
recipeDispatchApproval: 'Human approval for recipe dispatch',
|
|
304
|
+
recipeDispatchApprovalDesc: 'When on, recipe_trial/recipe_apply suspend for a human decision before dispatch: approve = execute; deny (with guidance) = agent revises candidates and re-submits',
|
|
303
305
|
},
|
|
304
306
|
server: {
|
|
305
307
|
host: 'Listen address',
|
|
@@ -1173,6 +1175,18 @@ export default {
|
|
|
1173
1175
|
stepUnset: 'unset',
|
|
1174
1176
|
recipeStepLimitLabel: 'Recipe per-step limit Δ≤',
|
|
1175
1177
|
recipeStepLimitPlaceholder: 'Follow node default',
|
|
1178
|
+
drvBadgeMes: 'MES edge',
|
|
1179
|
+
drvBadgeNoConv: 'No protocol conversion',
|
|
1180
|
+
mesTestBtn: 'Test read',
|
|
1181
|
+
mesTesting: 'Reading…',
|
|
1182
|
+
mesNotReady: 'Server endpoint not ready yet',
|
|
1183
|
+
apTitle: 'Setpoint write approvals',
|
|
1184
|
+
apRule: 'Approve = apply now; Reject = agent keeps the current value; Timeout = not approved',
|
|
1185
|
+
apInitiator: 'by',
|
|
1186
|
+
apTimeout: 'to timeout (defaults to reject)',
|
|
1187
|
+
apApprove: 'Approve',
|
|
1188
|
+
apReject: 'Reject',
|
|
1189
|
+
apCommentPh: 'Rejection note (returned verbatim to the agent)',
|
|
1176
1190
|
},
|
|
1177
1191
|
teams: {
|
|
1178
1192
|
selectChannel: 'Select a target channel',
|
package/i18n/locales/zh-CN.ts
CHANGED
|
@@ -300,6 +300,8 @@ export default {
|
|
|
300
300
|
approvalGate: '高危操作双人复核',
|
|
301
301
|
allowRegistration: '开放自助注册',
|
|
302
302
|
hstsEnabled: '下发 HSTS 头',
|
|
303
|
+
recipeDispatchApproval: '配方下发人工审批',
|
|
304
|
+
recipeDispatchApprovalDesc: '开启后 recipe_trial/recipe_apply 下发前挂起等待人工裁决:批准=执行;拒绝可附指导,Agent 按指导修订后重新提交',
|
|
303
305
|
},
|
|
304
306
|
server: {
|
|
305
307
|
host: '监听地址',
|
|
@@ -1173,6 +1175,18 @@ export default {
|
|
|
1173
1175
|
stepUnset: '未配置',
|
|
1174
1176
|
recipeStepLimitLabel: 'Recipe 单步上限 Δ≤',
|
|
1175
1177
|
recipeStepLimitPlaceholder: '跟随节点默认',
|
|
1178
|
+
drvBadgeMes: 'MES 边缘层',
|
|
1179
|
+
drvBadgeNoConv: '无协议转换',
|
|
1180
|
+
mesTestBtn: '试读',
|
|
1181
|
+
mesTesting: '试读中…',
|
|
1182
|
+
mesNotReady: '服务端未就绪',
|
|
1183
|
+
apTitle: '下发参数审批',
|
|
1184
|
+
apRule: '同意=立即执行;拒绝=Agent 按原值继续;超时=默认不同意',
|
|
1185
|
+
apInitiator: '发起',
|
|
1186
|
+
apTimeout: '后超时默认不同意',
|
|
1187
|
+
apApprove: '同意',
|
|
1188
|
+
apReject: '拒绝',
|
|
1189
|
+
apCommentPh: '拒绝意见(逐字回流给 Agent)',
|
|
1176
1190
|
},
|
|
1177
1191
|
teams: {
|
|
1178
1192
|
selectChannel: '选择目标 Channel',
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agentworkshop",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.54",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "AgentWorkShop \u8f6f\u4ef6\u5f00\u53d1\u7cfb\u7edf - \u57fa\u4e8e Nuxt 4 \u7684\u914d\u7f6e\u9a71\u52a8\u8fd0\u884c\u8303\u5f0f",
|
|
6
6
|
"license": "PolyForm-Noncommercial-1.0.0",
|
|
@@ -377,7 +377,14 @@ async function main() {
|
|
|
377
377
|
check('6.3b', 'DCW OPC UA 回读=172.5±1', Number.isFinite(opc2) && Math.abs(opc2 - 172.5) <= 1, `read=${opc2}`)
|
|
378
378
|
|
|
379
379
|
// 6.4 PLC Modbus 写(配方窗内)+ 真闭环 SP→PV 收敛
|
|
380
|
-
|
|
380
|
+
// 开跑下发配方参数也算一次在线写(60s 节流按节点计);撞锁时等待重试(治理按设计工作)
|
|
381
|
+
let wPlc = await api('POST', `/api/workshop/dcw/${plcSp.id}/write`, { body: { value: 182 }, token })
|
|
382
|
+
for (let i = 0; i < 70 && !(wPlc.code === 0 && wPlc.data?.outcome?.ok === true); i++) {
|
|
383
|
+
const m = String(wPlc.data?.message ?? wPlc.message ?? '').match((/还需 (\d+)s/))
|
|
384
|
+
if (!m || !/在线写入间隔/.test(String(wPlc.data?.message ?? wPlc.message ?? ''))) break
|
|
385
|
+
await sleep(Math.min(65, Number(m[1]) + 1) * 1000)
|
|
386
|
+
wPlc = await api('POST', `/api/workshop/dcw/${plcSp.id}/write`, { body: { value: 182 }, token })
|
|
387
|
+
}
|
|
381
388
|
check("6.4a", "DCW Modbus 写 SP=182(配方窗内)", wPlc.code === 0 && wPlc.data?.outcome?.ok === true, JSON.stringify(wPlc.data ?? wPlc.message ?? {}).slice(0, 140))
|
|
382
389
|
const wPlcBad = await api('POST', `/api/workshop/dcw/${plcSp.id}/write`, { body: { value: 195 }, token })
|
|
383
390
|
check('6.4b', '配方窗联锁负例(195 越窗 → 400)', wPlcBad.status === 400, `status=${wPlcBad.status} msg=${String(wPlcBad.message ?? '').slice(0, 80)}`)
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* POST /api/workshop/dcw/mes-test-read —— MES REST 映射试读(body: { driverConfig })。
|
|
3
|
+
* 供驱动表单调试 readMap:用户面鉴权 → 调 mes-rest 驱动 read 原语 →
|
|
4
|
+
* { ok, eng, ts, latencyMs, message }(ts 从驱动消息的 ts=<ISO> 约定中提取;latencyMs 为本次调用墙钟)。
|
|
5
|
+
*/
|
|
6
|
+
import { readBody } from 'h3'
|
|
7
|
+
import { resolveUser } from '@/server/api/workshop/caller'
|
|
8
|
+
import { defineApiHandler } from '@/server/utils/response'
|
|
9
|
+
import { mesRestDcwDriver } from '@/server/services/workshop/dcw/drivers/mes-rest'
|
|
10
|
+
|
|
11
|
+
export default defineApiHandler(async (event) => {
|
|
12
|
+
resolveUser(event)
|
|
13
|
+
const body = await readBody<{
|
|
14
|
+
driverConfig?: Record<string, unknown>
|
|
15
|
+
domain?: { min?: number, max?: number }
|
|
16
|
+
}>(event) ?? {}
|
|
17
|
+
const domain = { min: Number(body.domain?.min ?? 0), max: Number(body.domain?.max ?? 100) }
|
|
18
|
+
const t0 = Date.now()
|
|
19
|
+
const r = await mesRestDcwDriver.read!({ domain, driverConfig: body.driverConfig ?? {} })
|
|
20
|
+
const latencyMs = Date.now() - t0
|
|
21
|
+
// 驱动 read 消息约定携带 ts=<ISO>;提取为结构化字段(缺省 null)
|
|
22
|
+
const ts = r.message.match(/ts=([^\s,)]+)/)?.[1] ?? null
|
|
23
|
+
return { ok: r.ok, eng: r.eng, ts, latencyMs, message: r.message }
|
|
24
|
+
})
|
|
@@ -55,6 +55,7 @@ import { recoverInterruptedJobs, shutdownOrchestrator } from '../services/worksh
|
|
|
55
55
|
import { envStatus, startCreateVenv } from '../services/workshop/aml/env-manager'
|
|
56
56
|
import { attachOmpPluginBridge } from '../services/workshop/agents/plugin-tools'
|
|
57
57
|
import { startAmlRetentionTimer, stopAmlRetentionTimer } from '../services/workshop/aml/retention'
|
|
58
|
+
import { configureMesDatasets, defaultDatasetsDir } from '../services/workshop/mes/mes-datasets'
|
|
58
59
|
|
|
59
60
|
declare global {
|
|
60
61
|
|
|
@@ -149,6 +150,9 @@ export default function workshopPlugin(nitroApp: {
|
|
|
149
150
|
recoverInterruptedJobs()
|
|
150
151
|
startAmlRetentionTimer()
|
|
151
152
|
|
|
153
|
+
// MES 数据集服务(新表由 SCHEMA_SQL 启动建出;CSV 落 <configRoot>/datasets/<id>.csv)
|
|
154
|
+
configureMesDatasets(db, defaultDatasetsDir(dataDir))
|
|
155
|
+
|
|
152
156
|
// 插件 omp 工具注册桥:启动即接管 pending 队列(此前首次 spawn omp agent 才挂桥,
|
|
153
157
|
// 全新实例未 spawn 前 kb_agent/diag_run 等插件工具会一直"未知工具")
|
|
154
158
|
attachOmpPluginBridge()
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* 该族**不依赖 workspace**,由 dispatch 在 workspace 门控之前分流(保持原分发顺序)。
|
|
10
10
|
*/
|
|
11
11
|
import type { HostToolResult } from '../types'
|
|
12
|
-
import { toolAmlDatasetBuild, toolAmlDatasetStats, toolAmlJobCancel, toolAmlJobLogs, toolAmlJobStatus, toolAmlJobSubmit, toolAmlLeaderboard, toolAmlModelFind, toolAmlModelPromote, toolAmlModelReference, toolAmlNodeCatalog, toolAmlTrainingPlanCreate, toolAmlTrainingPlanList, toolAmlTrainingPlanTrain, toolDaqFrames, toolDaqQuery, toolDcwControl, toolDcwJudge, toolDcwJournal, toolDcwRead, toolDcwRollback, toolLineContext, toolMyIndustrialNodes, toolOpsLog, toolParamControl, toolParamRead, toolRecipeApply, toolRecipeLog, toolRecipeRollback, toolRecipeTrial, toolRecipeUpdate, toolRecipeVersions, toolOptimizationExplore, toolTwinProviderCatalog, toolTwinSceneDiscover, toolTwinSceneCompile, toolTwinSceneFreeze, toolTwinSceneRead, toolTwinPhysicsSpecDraft, toolTwinPhysicsSpecValidate, toolTwinPhysicsSpecCompile, toolTwinSnapshotCreate, toolTwinTrialRun, toolMpcOptimize, toolTwinGateEvaluate, toolTwinBayesOptimize, toolTwinCalibrationRequest } from '../../industrial'
|
|
12
|
+
import { toolAmlDatasetBuild, toolAmlDatasetStats, toolAmlJobCancel, toolAmlJobLogs, toolAmlJobStatus, toolAmlJobSubmit, toolAmlLeaderboard, toolAmlModelFind, toolAmlModelPromote, toolAmlModelReference, toolAmlNodeCatalog, toolAmlTrainingPlanCreate, toolAmlTrainingPlanList, toolAmlTrainingPlanTrain, toolDaqFrames, toolDaqQuery, toolDcwControl, toolDcwJudge, toolDcwJournal, toolDcwRead, toolDcwRollback, toolLineContext, toolMesCatalog, toolMesDatasetRead, toolMesDatasets, toolMesFetch, toolMyIndustrialNodes, toolOpsLog, toolParamControl, toolParamRead, toolRecipeApply, toolRecipeLog, toolRecipeRollback, toolRecipeTrial, toolRecipeUpdate, toolRecipeVersions, toolOptimizationExplore, toolTwinProviderCatalog, toolTwinSceneDiscover, toolTwinSceneCompile, toolTwinSceneFreeze, toolTwinSceneRead, toolTwinPhysicsSpecDraft, toolTwinPhysicsSpecValidate, toolTwinPhysicsSpecCompile, toolTwinSnapshotCreate, toolTwinTrialRun, toolMpcOptimize, toolTwinGateEvaluate, toolTwinBayesOptimize, toolTwinCalibrationRequest } from '../../industrial'
|
|
13
13
|
|
|
14
14
|
type IndustrialToolHandler = (agentId: string, args: Record<string, unknown>, channelId?: string) => Promise<HostToolResult>
|
|
15
15
|
|
|
@@ -59,9 +59,13 @@ const INDUSTRIAL_HANDLERS = new Map<string, IndustrialToolHandler>([
|
|
|
59
59
|
['line_context', (agentId, args) => toolLineContext(agentId, args as { line_id?: string })],
|
|
60
60
|
['recipe_versions', (agentId, args) => toolRecipeVersions(agentId, args as { recipe_id?: string, limit?: number | string })],
|
|
61
61
|
['recipe_update', (agentId, args) => toolRecipeUpdate(agentId, args as Parameters<typeof toolRecipeUpdate>[1])],
|
|
62
|
-
['recipe_rollback', (agentId, args) => toolRecipeRollback(agentId, args as Parameters<typeof toolRecipeRollback>[1])],
|
|
63
|
-
['recipe_trial', (agentId, args) => toolRecipeTrial(agentId, args as Parameters<typeof toolRecipeTrial>[1])],
|
|
62
|
+
['recipe_rollback', (agentId, args) => toolRecipeRollback(agentId, args as Parameters<typeof toolRecipeRollback>[1])],
|
|
63
|
+
['recipe_trial', (agentId, args) => toolRecipeTrial(agentId, args as Parameters<typeof toolRecipeTrial>[1])],
|
|
64
64
|
['recipe_apply', (agentId, args) => toolRecipeApply(agentId, args as Parameters<typeof toolRecipeApply>[1])],
|
|
65
|
+
['mes_catalog', (agentId, args) => toolMesCatalog(agentId, args as Parameters<typeof toolMesCatalog>[1])],
|
|
66
|
+
['mes_fetch', (agentId, args) => toolMesFetch(agentId, args as Parameters<typeof toolMesFetch>[1])],
|
|
67
|
+
['mes_dataset_read', (agentId, args) => toolMesDatasetRead(agentId, args as Parameters<typeof toolMesDatasetRead>[1])],
|
|
68
|
+
['mes_datasets', (agentId, args) => toolMesDatasets(agentId, args as Parameters<typeof toolMesDatasets>[1])],
|
|
65
69
|
])
|
|
66
70
|
|
|
67
71
|
/** 工业工具名集合(与 INDUSTRIAL_HANDLERS 同源;dispatch 据此在 workspace 门控前分流) */
|
|
@@ -12,12 +12,14 @@
|
|
|
12
12
|
* ops-tools.ts 运维日志与配方变更史(ops_log / recipe_* / line_context)
|
|
13
13
|
* aml-dataset-tools.ts AML 数据集与节点目录(aml_node_catalog / aml_dataset_*)
|
|
14
14
|
* aml-job-tools.ts AML 作业与模型(aml_job_* / aml_leaderboard / aml_model_*)
|
|
15
|
+
* mes-tools.ts MES 数据集面(mes_catalog / mes_fetch / mes_dataset_read / mes_datasets)
|
|
15
16
|
*/
|
|
16
17
|
export { toolMyIndustrialNodes, toolDcwControl, toolDcwRead } from './dcw-tools'
|
|
17
18
|
export { toolParamControl, toolParamRead } from './param-tools'
|
|
18
19
|
export { toolDaqQuery, toolDaqFrames } from './daq-tools'
|
|
19
20
|
export { toolDcwJudge, toolDcwRollback, toolDcwJournal } from './dcw-judge-tools'
|
|
20
21
|
export { toolOpsLog, toolRecipeLog, toolLineContext, toolRecipeVersions, toolRecipeUpdate, toolRecipeRollback, toolRecipeTrial, toolRecipeApply } from './ops-tools'
|
|
22
|
+
export { toolMesCatalog, toolMesFetch, toolMesDatasetRead, toolMesDatasets } from './mes-tools'
|
|
21
23
|
export { toolAmlNodeCatalog, toolAmlDatasetBuild, toolAmlDatasetStats } from './aml-dataset-tools'
|
|
22
24
|
export { toolAmlJobSubmit, toolAmlJobStatus, toolAmlJobLogs, toolAmlJobCancel, toolAmlLeaderboard, toolAmlModelFind, toolAmlModelPromote, toolAmlModelReference, toolAmlTrainingPlanList, toolAmlTrainingPlanTrain, toolAmlTrainingPlanCreate } from './aml-job-tools'
|
|
23
25
|
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MES 数据集工具族(mes_catalog / mes_fetch / mes_dataset_read / mes_datasets)。
|
|
3
|
+
*
|
|
4
|
+
* 面向 Agent 的 MES REST 点位只读面:目录检索、历史取数(护栏在 mes-controller 代码级)、
|
|
5
|
+
* CSV 数据集读取与清单。铁律:MES 行级原文不进 prompt —— 所有回包只给统计摘要 + ≤3 行采样;
|
|
6
|
+
* 全量原文只落 <configRoot>/datasets/<id>.csv(见 services/workshop/mes/mes-datasets.ts)。
|
|
7
|
+
* 权限:fetch 按 dcw 绑线过滤(controller 内代码级);数据集读取/清单按
|
|
8
|
+
* 创建者 ∪ 节点绑定 ∪ 可读产线(agentOpsScope 既有路径)过滤。
|
|
9
|
+
*/
|
|
10
|
+
import type { MesDatasetRow, MesDatasetRead } from '../../mes/mes-datasets'
|
|
11
|
+
import { getMesDatasets } from '../../mes/mes-datasets'
|
|
12
|
+
import { createMesController } from '../../mes/mes-controller'
|
|
13
|
+
import { agentOpsScope } from './ops-tools'
|
|
14
|
+
import { AppError } from '../../../../utils/errors'
|
|
15
|
+
|
|
16
|
+
/** 控制器单例(护栏依赖真实服务;无状态可安全复用) */
|
|
17
|
+
let controller: ReturnType<typeof createMesController> | null = null
|
|
18
|
+
function mesController(): ReturnType<typeof createMesController> {
|
|
19
|
+
controller ??= createMesController()
|
|
20
|
+
return controller
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/** 数据集可见性:创建者 ∪ 节点绑定 ∪ 可读产线(节点授权线 ∪ 频道绑定线) */
|
|
24
|
+
function mesDatasetVisible(agentId: string, ds: MesDatasetRow): boolean {
|
|
25
|
+
if (ds.createdBy === agentId) return true
|
|
26
|
+
const scope = agentOpsScope(agentId)
|
|
27
|
+
if (!scope) return false
|
|
28
|
+
if (scope.nodeIds.has(ds.nodeId)) return true
|
|
29
|
+
return !!ds.lineId && (scope.lineIds.includes(ds.lineId) || scope.boundLineIds.includes(ds.lineId))
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/** 数据集行 → 一行摘要(id | 节点 | 窗口 | 行数 | 状态) */
|
|
33
|
+
function dsLine(ds: MesDatasetRow): string {
|
|
34
|
+
const win = ds.fromTs && ds.toTs ? `${ds.fromTs.slice(5, 16).replace('T', ' ')} ~ ${ds.toTs.slice(5, 16).replace('T', ' ')}` : '当前值'
|
|
35
|
+
let state: string
|
|
36
|
+
if (ds.status === 'ready') state = `就绪(${ds.rows} 行,sha256 ${ds.sha256.slice(0, 8)})`
|
|
37
|
+
else if (ds.status === 'running') state = '取数中'
|
|
38
|
+
else state = `失败(${ds.error.slice(0, 80)})`
|
|
39
|
+
return `- ${ds.id} | ${ds.nodeName || ds.nodeId} | ${win} | ${state}`
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/** 工具:mes_catalog —— MES REST 点位目录(数据驱动;q 子串/产线过滤;只读,无授权门槛)。
|
|
43
|
+
* 每条含 id/单位/量程/读写/历史能力位,是 mes_fetch 与 mes_dataset_read 的寻址入口。 */
|
|
44
|
+
export async function toolMesCatalog(_agentId: string, args: { q?: string, line_id?: string, limit?: number | string } = {}): Promise<{ text: string, isError?: boolean }> {
|
|
45
|
+
try {
|
|
46
|
+
const r = await mesController().catalog(args)
|
|
47
|
+
return { text: r.text }
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
return { text: `MES 点位目录查询失败:${err instanceof Error ? err.message : String(err)}(服务未就绪时请稍后重试)。`, isError: true }
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/** 工具:mes_fetch —— MES 历史取数(护栏代码级:绑线授权/窗口≤7天/行数≤5000/每分钟≤6次)。
|
|
55
|
+
* 三模式:无 from/to=当前值快照;小窗口内联统计;大请求异步落 CSV 数据集(回 job_id/dataset_id,
|
|
56
|
+
* 勿轮询,用 mes_datasets 查状态)。回包只含统计摘要 + ≤3 行采样,MES 原文不进对话。 */
|
|
57
|
+
export async function toolMesFetch(agentId: string, args: { ids?: unknown, from?: string, to?: string, max_rows?: number | string } = {}): Promise<{ text: string, isError?: boolean }> {
|
|
58
|
+
try {
|
|
59
|
+
const r = await mesController().fetch(agentId, args)
|
|
60
|
+
return { text: r.text, isError: r.isError }
|
|
61
|
+
}
|
|
62
|
+
catch (err) {
|
|
63
|
+
return { text: `MES 取数失败:${err instanceof Error ? err.message : String(err)}(驱动离线或点位配置缺失时常见;可先用 mes_catalog 确认点位)。`, isError: true }
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/** 工具:mes_dataset_read —— 读 CSV 数据集(head=列名+总行数 / stats=统计 / rows=分页)。
|
|
68
|
+
* 权限:创建者或有该节点/产线可见权;回包同样只带 ≤3 行采样(原文不进 prompt)。 */
|
|
69
|
+
export async function toolMesDatasetRead(agentId: string, args: { dataset_id?: string, mode?: string, offset?: number | string } = {}): Promise<{ text: string, isError?: boolean }> {
|
|
70
|
+
const datasetId = String(args.dataset_id ?? '').trim()
|
|
71
|
+
if (!datasetId) return { text: 'dataset_id 必填(mes_fetch 异步回包或 mes_datasets 清单里的 id)。', isError: true }
|
|
72
|
+
const modeArg = String(args.mode ?? 'head').trim()
|
|
73
|
+
const mode = modeArg === 'stats' || modeArg === 'rows' ? modeArg : 'head'
|
|
74
|
+
try {
|
|
75
|
+
const store = getMesDatasets()
|
|
76
|
+
const meta = store.datasetMeta(datasetId)
|
|
77
|
+
if (!meta) return { text: `数据集 ${datasetId} 不存在(用 mes_datasets 列出你可读的数据集)。`, isError: true }
|
|
78
|
+
if (!mesDatasetVisible(agentId, meta)) {
|
|
79
|
+
return { text: `无权读取数据集 ${datasetId}(仅创建者、该节点绑定者或该产线可读者可读)。`, isError: true }
|
|
80
|
+
}
|
|
81
|
+
const r: MesDatasetRead = store.readDataset(datasetId, mode, Number(args.offset) || 0)
|
|
82
|
+
const stateTxt = meta.status === 'ready' ? '' : meta.status === 'running' ? '\n注意:数据集仍在取数中,当前为已写入部分。' : `\n注意:取数已失败:${meta.error.slice(0, 120)}(以下为失败前已写入部分)。`
|
|
83
|
+
if (r.mode === 'stats') {
|
|
84
|
+
const s = r.stats
|
|
85
|
+
const f4 = (v: number | null | undefined): string => v == null || !Number.isFinite(v) ? '-' : String(Number(v.toFixed(4)))
|
|
86
|
+
return {
|
|
87
|
+
text: `数据集 ${datasetId} 统计(${meta.nodeName || meta.nodeId},产线 ${meta.lineId || '未分配'}):\n`
|
|
88
|
+
+ ` 数值行数 ${s.count} | 首 ${s.firstTs ?? '-'} ~ 末 ${s.lastTs ?? '-'}\n`
|
|
89
|
+
+ ` min ${f4(s.min)} / max ${f4(s.max)} / mean ${f4(s.mean)} / stddev ${f4(s.stddev)}\n`
|
|
90
|
+
+ ` 文件 sha256 ${meta.sha256.slice(0, 16)}${stateTxt}`,
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
// head / rows:列名+行数+分页游标,采样 ≤3 行(原文不进 prompt)
|
|
94
|
+
let headTxt: string
|
|
95
|
+
let totalRows: number
|
|
96
|
+
let sample: string[]
|
|
97
|
+
if (r.mode === 'head') {
|
|
98
|
+
headTxt = `数据集 ${datasetId} 概览(${meta.nodeName || meta.nodeId},产线 ${meta.lineId || '未分配'}):\n 列名: ${r.head.columns.join(', ')}\n 总行数: ${r.head.totalRows}\n`
|
|
99
|
+
totalRows = r.head.totalRows
|
|
100
|
+
sample = r.head.preview.slice(0, 3).map(row => row.join(','))
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
headTxt = `数据集 ${datasetId} 第 ${r.rowsView.offset} 行起的分页(每页 20 行,共 ${r.rowsView.total} 行;本页 ${r.rowsView.rows.length} 行):\n`
|
|
104
|
+
totalRows = r.rowsView.total
|
|
105
|
+
sample = r.rowsView.rows.slice(0, 3).map(row => row.join(','))
|
|
106
|
+
}
|
|
107
|
+
return {
|
|
108
|
+
text: `${headTxt}采样(≤3 行,ts,value): ${sample.join(' | ') || '(空)'}${totalRows > 3 ? '(其余行不进对话;统计用 mode=stats,分页翻看用 offset)' : ''}${stateTxt}`,
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
catch (err) {
|
|
112
|
+
if (err instanceof AppError && err.status === 404) return { text: err.message, isError: true }
|
|
113
|
+
return { text: `数据集读取失败:${err instanceof Error ? err.message : String(err)}`, isError: true }
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/** 工具:mes_datasets —— 你可见的 CSV 数据集清单(新→旧;创建者/节点绑定/产线可读过滤)。
|
|
118
|
+
* 用于找回 mes_fetch 异步作业的 dataset_id 与确认取数状态(替代轮询 job)。 */
|
|
119
|
+
export async function toolMesDatasets(agentId: string, args: { limit?: number | string } = {}): Promise<{ text: string, isError?: boolean }> {
|
|
120
|
+
try {
|
|
121
|
+
const store = getMesDatasets()
|
|
122
|
+
const limit = Math.min(Math.max(Math.round(Number(args.limit)) || 20, 1), 100)
|
|
123
|
+
const visible = store.listDatasets(100).filter(ds => mesDatasetVisible(agentId, ds)).slice(0, limit)
|
|
124
|
+
if (visible.length === 0) {
|
|
125
|
+
return { text: '你还没有可见的 MES 数据集。用 mes_fetch(带 from/to 与较大 max_rows)创建;或刚创建的作业尚未登记(稍后再查)。' }
|
|
126
|
+
}
|
|
127
|
+
const running = visible.filter(ds => ds.status === 'running').length
|
|
128
|
+
return {
|
|
129
|
+
text: `MES 数据集清单(可见 ${visible.length} 条,新→旧${running > 0 ? `;其中 ${running} 条取数中 —— 勿轮询,未完成先做别的` : ''}):\n${visible.map(dsLine).join('\n')}\n\n说明:读统计用 mes_dataset_read(dataset_id, mode=stats);读分页/概览用 mode=head|rows。`,
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
catch (err) {
|
|
133
|
+
return { text: `数据集清单查询失败:${err instanceof Error ? err.message : String(err)}(服务未就绪时请稍后重试)。`, isError: true }
|
|
134
|
+
}
|
|
135
|
+
}
|
|
@@ -11,6 +11,7 @@ import { getDcwLineRepo } from '../../dcw/dcw-line.repo'
|
|
|
11
11
|
import { getDcwProductRepo } from '../../dcw/dcw-product.repo'
|
|
12
12
|
import { getDcwRecipeRepo } from '../../dcw/dcw-recipe.repo'
|
|
13
13
|
import { getOps } from '../../ops/ops'
|
|
14
|
+
import { settingOf } from '../../settings'
|
|
14
15
|
import { fanoutQuery, windowOf } from './audit-query'
|
|
15
16
|
|
|
16
17
|
// ================================================================
|
|
@@ -324,12 +325,18 @@ export async function toolRecipeUpdate(agentId: string, args: {
|
|
|
324
325
|
})
|
|
325
326
|
.map((p) => {
|
|
326
327
|
const patch = list.find(x => String(x.node_id).trim() === p.nodeId)
|
|
327
|
-
|
|
328
|
-
|
|
328
|
+
// stepLimit 必须随行携带:丢了会被 normParams 视为"参数有变化"(同值也空转增版),
|
|
329
|
+
// 且配方层单步限幅被静默抹掉(退化为参数/节点层默认)——治理数据完整性
|
|
330
|
+
const out: { nodeId: string, templateRef?: string, value: number, min?: number, max?: number, stepLimit?: number } = {
|
|
331
|
+
nodeId: p.nodeId,
|
|
332
|
+
templateRef: p.templateRef,
|
|
333
|
+
value: patch ? Number(patch.value) : p.value,
|
|
334
|
+
}
|
|
329
335
|
if (p.min != null) out.min = p.min
|
|
330
|
-
if (patch
|
|
336
|
+
if (patch?.min != null && Number.isFinite(Number(patch.min))) out.min = Number(patch.min)
|
|
331
337
|
if (p.max != null) out.max = p.max
|
|
332
|
-
if (patch
|
|
338
|
+
if (patch?.max != null && Number.isFinite(Number(patch.max))) out.max = Number(patch.max)
|
|
339
|
+
if (p.stepLimit != null) out.stepLimit = p.stepLimit
|
|
333
340
|
return out
|
|
334
341
|
})
|
|
335
342
|
const extra = list.filter(p => !recipe.params.some(x => x.nodeId === String(p.node_id).trim()))
|
|
@@ -385,7 +392,7 @@ export async function toolRecipeRollback(agentId: string, args: {
|
|
|
385
392
|
}
|
|
386
393
|
try {
|
|
387
394
|
if (dispatch) {
|
|
388
|
-
const { recipe: updated, run } = await getDcwController().rollbackRecipeAndDispatch(recipeId, {
|
|
395
|
+
const { recipe: updated, run, definitionNoop } = await getDcwController().rollbackRecipeAndDispatch(recipeId, {
|
|
389
396
|
version: toLastGood ? undefined : version,
|
|
390
397
|
toLastGood,
|
|
391
398
|
by: 'agent',
|
|
@@ -394,8 +401,11 @@ export async function toolRecipeRollback(agentId: string, args: {
|
|
|
394
401
|
description: reason,
|
|
395
402
|
})
|
|
396
403
|
const okN = run.results.filter(r => r.ok).length
|
|
404
|
+
const defNote = definitionNoop
|
|
405
|
+
? `定义已在目标版本 v${updated.version ?? 1}(未生成新版本)`
|
|
406
|
+
: `已生成 v${updated.version ?? 1}`
|
|
397
407
|
return {
|
|
398
|
-
text: `统一回退完成:配方「${updated.name}
|
|
408
|
+
text: `统一回退完成:配方「${updated.name}」${defNote},参数恢复为目标版本(${toLastGood ? '已知良好批次冻结' : `v${version}`}),并已整批重下发到 PLC(${okN}/${run.results.length} 参数成功);原因:${reason}。\n用 daq_query 复测确认恢复效果;版本史用 recipe_versions 复核。`,
|
|
399
409
|
}
|
|
400
410
|
}
|
|
401
411
|
const updated = getDcwController().revertRecipe(recipeId, {
|
|
@@ -416,6 +426,20 @@ export async function toolRecipeRollback(agentId: string, args: {
|
|
|
416
426
|
}
|
|
417
427
|
}
|
|
418
428
|
|
|
429
|
+
/**
|
|
430
|
+
* v19.5 HITL 下发裁决门:security.recipeDispatchApproval 开启时,配方下发动作
|
|
431
|
+
* 不直接执行 —— 挂起等待人工裁决(复用 ToolApprovalService,人类批/拒理由原样回流):
|
|
432
|
+
* 批准 → 按原逻辑执行下发,回执附人工附言;
|
|
433
|
+
* 拒绝(可附指导)→ 工具回包携带人工指导文本,Agent 按指导修订候选后重新提交 ——
|
|
434
|
+
* 即"改好配方交给人类判断是否下发;不下发则人告诉 Agent 怎么修"的真实作业语义。
|
|
435
|
+
* 超时(默认 180s,security.hitl_timeout_ms)自动按拒绝收敛。
|
|
436
|
+
*/
|
|
437
|
+
async function hitlDispatchGate(agentId: string, detail: string, title: string): Promise<{ approved: boolean, comment: string }> {
|
|
438
|
+
const { getToolApprovals } = await import('../tool-approvals')
|
|
439
|
+
const decision = await getToolApprovals().request(agentId, 'recipe-dispatch', 'dcw', detail, { title })
|
|
440
|
+
return { approved: decision.approved, comment: decision.comment }
|
|
441
|
+
}
|
|
442
|
+
|
|
419
443
|
/** 工具:recipe_trial —— 多参数候选整批试验下发(v19 配方链路核心)。
|
|
420
444
|
* 候选值只覆盖列出节点(**必须是自己绑定的数控节点**);整批一次落产线,**不写配方版本** ——
|
|
421
445
|
* 复测判读:有进步/达标 → recipe_update 固化(同 id 版本+1);劣化 → recipe_rollback(dispatch=true) 统一回退。
|
|
@@ -445,6 +469,26 @@ export async function toolRecipeTrial(agentId: string, args: {
|
|
|
445
469
|
}
|
|
446
470
|
}
|
|
447
471
|
try {
|
|
472
|
+
// v19.5 HITL 门:开启人工审批时,整批试验前先挂起等人工裁决(拒绝附指导 → 回给 Agent 修订)
|
|
473
|
+
let hitlNote = ''
|
|
474
|
+
if (settingOf('security.recipeDispatchApproval') === true) {
|
|
475
|
+
const gate = await hitlDispatchGate(
|
|
476
|
+
agentId,
|
|
477
|
+
`配方试验候选(整批 ${list.length} 参数):${list.map((p) => {
|
|
478
|
+
const node = getDcwController().byId(p.nodeId)
|
|
479
|
+
const old = recipe.params.find(x => x.nodeId === p.nodeId)?.value
|
|
480
|
+
return `${node?.name ?? p.nodeId} ${old ?? '?'}→${p.value}${node?.unit ?? ''}`
|
|
481
|
+
}).join(';')} | 假设:${hypothesis} | 批准=整批下发试验(不写版本);拒绝可附指导`,
|
|
482
|
+
'配方试验(整批候选)下发审批',
|
|
483
|
+
)
|
|
484
|
+
if (!gate.approved) {
|
|
485
|
+
return {
|
|
486
|
+
text: `人工未批准本次试验下发。人工指导:${gate.comment || '(无附言,仅不同意候选)'}。请按人工指导修订候选参数(必要时先 recipe_update 调整基线),然后重新提交 recipe_trial。`,
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
// 人工附言随批准回执回流(Agent 与审计都能看到放行时人的原话)
|
|
490
|
+
if (gate.comment) hitlNote = `\n人工附言:${gate.comment}`
|
|
491
|
+
}
|
|
448
492
|
const run = await getDcwController().applyRecipe(recipeId, { overrides: list, trial: true })
|
|
449
493
|
const okN = run.results.filter(r => r.ok).length
|
|
450
494
|
// 批次级留痕:试验动作入审计(逐参数写已有 write-audit;这里是"一次试验"粒度)
|
|
@@ -463,7 +507,7 @@ export async function toolRecipeTrial(agentId: string, args: {
|
|
|
463
507
|
return `${node?.name ?? r.templateRef}→${r.value}${node?.unit ?? ''}${r.ok ? '' : ` 被拒${reason}`}`
|
|
464
508
|
}).join(';')
|
|
465
509
|
return {
|
|
466
|
-
text: `试验已整批下发(${okN}/${run.results.length} 成功,批次 ${run.id.slice(0, 8)}):${changed}。假设:${hypothesis}
|
|
510
|
+
text: `试验已整批下发(${okN}/${run.results.length} 成功,批次 ${run.id.slice(0, 8)}):${changed}。假设:${hypothesis}。${hitlNote}注意:本次试验**未写入配方版本** —— 等待工艺惯性后 daq_query 复测判读:有进步/达标 → recipe_update 把候选值固化进配方(同 id 版本+1);无进步/劣化 → recipe_rollback(recipe_id, dispatch=true, reason=…) 统一回退(定义回退+PLC 整批恢复)。`,
|
|
467
511
|
}
|
|
468
512
|
}
|
|
469
513
|
catch (err) {
|
|
@@ -491,8 +535,35 @@ export async function toolRecipeApply(agentId: string, args: {
|
|
|
491
535
|
return { text: `无权下发配方 ${recipeId}(需持有该配方至少一个数控节点的授权;找 lead 用 team_grant_nodes 授予)。`, isError: true }
|
|
492
536
|
}
|
|
493
537
|
try {
|
|
538
|
+
// v19.5 HITL 门:开启人工审批时,正式下发前先挂起等人工裁决(拒绝附指导 → 回给 Agent 修订)
|
|
539
|
+
let hitlNote = ''
|
|
540
|
+
if (settingOf('security.recipeDispatchApproval') === true) {
|
|
541
|
+
const gate = await hitlDispatchGate(
|
|
542
|
+
agentId,
|
|
543
|
+
`配方正式下发:「${recipe.name}」v${recipe.version ?? 1} 全参数整批(${recipe.params.length} 项):${recipe.params.map((p) => {
|
|
544
|
+
const node = getDcwController().byId(p.nodeId)
|
|
545
|
+
return `${node?.name ?? p.nodeId}=${p.value}${node?.unit ?? ''}`
|
|
546
|
+
}).join(';')} | 批准=整批下发到 PLC;拒绝可附指导`,
|
|
547
|
+
'配方下发审批',
|
|
548
|
+
)
|
|
549
|
+
if (!gate.approved) {
|
|
550
|
+
return {
|
|
551
|
+
text: `人工未批准本次配方下发。人工指导:${gate.comment || '(无附言)'}。请按人工指导修订配方(recipe_update)后重新提交 recipe_apply。`,
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
// 人工附言随批准回执回流(与 recipe_trial 同口径)
|
|
555
|
+
if (gate.comment) hitlNote = `\n人工附言:${gate.comment}`
|
|
556
|
+
}
|
|
494
557
|
const run = await getDcwController().applyRecipe(recipeId)
|
|
495
558
|
const okN = run.results.filter(r => r.ok).length
|
|
559
|
+
// 逐参数标注:被跳过/失败的参数(节点停用/已删除/限界拒绝)必须透出给 Agent,
|
|
560
|
+
// 否则回包只见 N/N 成功数,无法定位哪些参数未生效(与 recipe_trial 的逐参数渲染同口径)。
|
|
561
|
+
const skipped = run.results.filter(r => !r.ok)
|
|
562
|
+
.map((r) => {
|
|
563
|
+
const node = r.nodeId ? getDcwController().byId(r.nodeId) : undefined
|
|
564
|
+
return `${node?.name ?? r.templateRef ?? r.nodeId ?? '?'}: ${String(r.message).slice(0, 80)}`
|
|
565
|
+
})
|
|
566
|
+
const skippedNote = skipped.length > 0 ? `\n未生效参数(${skipped.length}):\n - ${skipped.join('\n - ')}` : ''
|
|
496
567
|
try {
|
|
497
568
|
const { recordOps } = await import('../../ops/ops')
|
|
498
569
|
recordOps({
|
|
@@ -503,7 +574,7 @@ export async function toolRecipeApply(agentId: string, args: {
|
|
|
503
574
|
}
|
|
504
575
|
catch { /* 审计失败不影响下发结果 */ }
|
|
505
576
|
return {
|
|
506
|
-
text: `配方「${recipe.name}」v${recipe.version ?? 1} 已整批下发(${okN}/${run.results.length} 参数成功,批次 ${run.id.slice(0, 8)})
|
|
577
|
+
text: `配方「${recipe.name}」v${recipe.version ?? 1} 已整批下发(${okN}/${run.results.length} 参数成功,批次 ${run.id.slice(0, 8)})。${skippedNote}${hitlNote}用 daq_query 复测确认工艺响应。`,
|
|
507
578
|
}
|
|
508
579
|
}
|
|
509
580
|
catch (err) {
|