agentworkshop 0.7.49 → 0.7.51
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 +409 -6
- package/.output/.AgentWorkShop/aml-python/__pycache__/aml_eval.cpython-312.pyc +0 -0
- package/.output/.AgentWorkShop/aml-python/__pycache__/amlkit.cpython-312.pyc +0 -0
- package/.output/.AgentWorkShop/aml-python/__pycache__/train-example.cpython-312.pyc +0 -0
- package/.output/.AgentWorkShop/aml-python/__pycache__/train-hybrid-example.cpython-312.pyc +0 -0
- package/.output/.AgentWorkShop/aml-python/aml_eval.py +39 -6
- package/.output/.AgentWorkShop/aml-python/amlkit.py +222 -3
- package/.output/.AgentWorkShop/aml-python/train-hybrid-example.py +278 -32
- package/.output/.AgentWorkShop/prompts/host-tools.json +409 -6
- package/.output/.AgentWorkShop/schema.json +135 -133
- package/.output/nitro.json +1 -1
- package/.output/public/_nuxt/2_DkYoqD2.js +1 -0
- package/.output/public/_nuxt/8FXd9As6.js +1 -0
- package/.output/public/_nuxt/{d-w5jR8R.js → B3zB6K6m.js} +1 -1
- package/.output/public/_nuxt/{OXtV_ukR.js → B4ujjkUI.js} +1 -1
- package/.output/public/_nuxt/B9BmiUil.js +2 -0
- package/.output/public/_nuxt/B9QzrmgE.js +1 -0
- package/.output/public/_nuxt/BE7BrEw6.js +1 -0
- package/.output/public/_nuxt/{Cu8c3oMN2.js → BFZIll912.js} +1 -1
- package/.output/public/_nuxt/{ChtjzEpK2.js → BGAaKBeo2.js} +1 -1
- package/.output/public/_nuxt/BOmDHp5L.js +14 -0
- package/.output/public/_nuxt/BPou3U7b.js +1 -0
- package/.output/public/_nuxt/{CiTQY_n32.js → BXx9AxdF2.js} +1 -1
- package/.output/public/_nuxt/Bfe2qOYs.js +1 -0
- package/.output/public/_nuxt/BgEDwFMf.js +1 -0
- package/.output/public/_nuxt/BgnhB8r5.js +1 -0
- package/.output/public/_nuxt/Bhe953zV2.js +1 -0
- package/.output/public/_nuxt/{BITZvQBK.js → Bpkm4W5P.js} +1 -1
- package/.output/public/_nuxt/C4lagVdN2.js +1 -0
- package/.output/public/_nuxt/C5cf3T4d.js +1 -0
- package/.output/public/_nuxt/CBIoheY42.js +1 -0
- package/.output/public/_nuxt/{CN1CDAwe.js → CFQSjB1h.js} +1 -1
- package/.output/public/_nuxt/CFQyYMEn2.js +1 -0
- package/.output/public/_nuxt/CHrErv1E.js +1 -0
- package/.output/public/_nuxt/{fxWyOzyp2.js → CI2yXRr42.js} +1 -1
- package/.output/public/_nuxt/CIduggmC.js +1 -0
- package/.output/public/_nuxt/CU-mhG0-.js +1 -0
- package/.output/public/_nuxt/CXzfXC5M.js +1 -0
- package/.output/public/_nuxt/{H6pPjo0l.js → C_sjV3Ee.js} +1 -1
- package/.output/public/_nuxt/Ccps4cxo.js +1 -0
- package/.output/public/_nuxt/{CPmNRTBk2.js → CdIsmU5a2.js} +10 -10
- package/.output/public/_nuxt/{BS9P_Ies2.js → ChGuLxwW2.js} +1 -1
- package/.output/public/_nuxt/{Ck5oMvUk.js → Cn6ihm8j.js} +1 -1
- package/.output/public/_nuxt/{CWzp2R6G.js → D-Xyb3DA.js} +1 -1
- package/.output/public/_nuxt/D0SNhlnt.js +1 -0
- package/.output/public/_nuxt/D0ldVwl-.js +1 -0
- package/.output/public/_nuxt/DClNt1uS.js +1 -0
- package/.output/public/_nuxt/{CTVfcnjU.js → DQMbdg4t.js} +2 -2
- package/.output/public/_nuxt/{DHSDk8Bq2.js → DTxfFIvL2.js} +1 -1
- package/.output/public/_nuxt/DVKXGuMz2.js +1 -0
- package/.output/public/_nuxt/{CLySL7mW.js → Da0h_6VA.js} +1 -1
- package/.output/public/_nuxt/{PixDfCSm.js → DefDtlKK.js} +1 -1
- package/.output/public/_nuxt/DjefmmJu.js +1 -0
- package/.output/public/_nuxt/DnH9SRMW2.js +1 -0
- package/.output/public/_nuxt/{BmiMC_BC.js → DppqsiPC.js} +1 -1
- package/.output/public/_nuxt/Drq9iy6V.js +1 -0
- package/.output/public/_nuxt/DsGf2IV82.js +1 -0
- package/.output/public/_nuxt/{DoKpLEqc.js → DzfVS8N72.js} +1 -1
- package/.output/public/_nuxt/{DRpFsrno.js → I1cI6sPJ2.js} +1 -1
- package/.output/public/_nuxt/IU-UGkCJ2.js +1 -0
- package/.output/public/_nuxt/KXjvpIk2.js +1 -0
- package/.output/public/_nuxt/NJn94js_.js +1 -0
- package/.output/public/_nuxt/ON2x-t6n.js +1 -0
- package/.output/public/_nuxt/S799kNo8.js +1 -0
- package/.output/public/_nuxt/{uI9Ki_XZ.js → S9rLP7_v.js} +1 -1
- package/.output/public/_nuxt/UN3nSFjj2.js +1 -0
- package/.output/public/_nuxt/WVTVkqef.js +1 -0
- package/.output/public/_nuxt/{C_VAXV7I2.js → Yv9YItEX2.js} +1 -1
- package/.output/public/_nuxt/_id_.DamiFT0Q.css +1 -0
- package/.output/public/_nuxt/{_id_.BTrFUIHX.css → _id_.DpRe1PRh.css} +1 -1
- package/.output/public/_nuxt/_wsId_.DkrQkT6r.css +1 -0
- package/.output/public/_nuxt/aml.-czpKIs8.css +1 -0
- package/.output/public/_nuxt/asmJ99nX2.js +47 -0
- package/.output/public/_nuxt/builds/latest.json +1 -1
- package/.output/public/_nuxt/builds/meta/912eb5bb-670e-4cc8-b21d-7fc097723466.json +1 -0
- package/.output/public/_nuxt/{default.uao9U50c.css → default.CXb_zoN6.css} +1 -1
- package/.output/public/_nuxt/{entry.6DEjPWvR.css → entry.JdEG3KJg.css} +1 -1
- package/.output/public/_nuxt/jRTz0hjN2.js +1 -0
- package/.output/public/_nuxt/{DLPuRMeG.js → k5K6Jj6g.js} +1 -1
- package/.output/public/_nuxt/operations.B8X9uWK6.css +1 -0
- package/.output/public/_nuxt/{settings.Bo5EYkLI.css → settings.O26Dw1iT.css} +1 -1
- package/.output/public/_nuxt/{BACBBVdw.js → tKxYgsf-.js} +1 -1
- package/.output/public/_nuxt/{Cm_PTn9t2.js → vXrNItas2.js} +1 -1
- package/.output/public/_nuxt/{Cr518Gh02.js → zsRclU9w2.js} +1 -1
- package/.output/server/chunks/_/LeftOutlined.mjs +1 -1
- package/.output/server/chunks/_/SearchOutlined.mjs +1 -1
- package/.output/server/chunks/_/binding-authz.mjs +1 -1
- package/.output/server/chunks/_/character-asset.repo.mjs +1 -1
- package/.output/server/chunks/_/entity.mjs +1 -1
- package/.output/server/chunks/_/host-bindings.mjs +1 -1
- package/.output/server/chunks/_/nitro.mjs +26245 -21135
- package/.output/server/chunks/_/nitro.mjs.map +1 -1
- package/.output/server/chunks/_/scene-layout.repo.mjs +1 -1
- package/.output/server/chunks/build/Checkbox-4EdGAAl_.mjs +1 -1
- package/.output/server/chunks/build/FormItemContext-4ORSzhWv.mjs +1 -1
- package/.output/server/chunks/build/{OmpTerminalPanel-EQHrOJbw.mjs → OmpTerminalPanel-mk31gVzA.mjs} +3 -3
- package/.output/server/chunks/build/{OmpTerminalPanel-EQHrOJbw.mjs.map → OmpTerminalPanel-mk31gVzA.mjs.map} +1 -1
- package/.output/server/chunks/build/{PluginSlot-BP_qedpQ.mjs → PluginSlot-D2WUZgbp.mjs} +2 -2
- package/.output/server/chunks/build/{PluginSlot-BP_qedpQ.mjs.map → PluginSlot-D2WUZgbp.mjs.map} +1 -1
- package/.output/server/chunks/build/{TownView-BAR8CPIZ.mjs → TownView-fP9BiALv.mjs} +6 -6
- package/.output/server/chunks/build/{TownView-BAR8CPIZ.mjs.map → TownView-fP9BiALv.mjs.map} +1 -1
- package/.output/server/chunks/build/{_id_-DgMpjM3_.mjs → _id_-BUpQSlzo.mjs} +142 -106
- package/.output/server/chunks/build/_id_-BUpQSlzo.mjs.map +1 -0
- package/.output/server/chunks/build/{_id_-Dv3BQbYV.mjs → _id_-CDlur81q.mjs} +25 -24
- package/.output/server/chunks/build/_id_-CDlur81q.mjs.map +1 -0
- package/.output/server/chunks/build/{_wsId_-BKJvFmyf.mjs → _wsId_-DPy2BXRd.mjs} +547 -158
- package/.output/server/chunks/build/_wsId_-DPy2BXRd.mjs.map +1 -0
- package/.output/server/chunks/build/{agents-B2GLPmn2.mjs → agents-CDLcboCv.mjs} +12 -12
- package/.output/server/chunks/build/{agents-B2GLPmn2.mjs.map → agents-CDLcboCv.mjs.map} +1 -1
- package/.output/server/chunks/build/{aml-DdWicH3t.mjs → aml-DsgtDLWF.mjs} +28 -27
- package/.output/server/chunks/build/aml-DsgtDLWF.mjs.map +1 -0
- package/.output/server/chunks/build/api-BY6ji7RC.mjs +6 -6
- package/.output/server/chunks/build/card-CUSocE9p.mjs +1 -1
- package/.output/server/chunks/build/{channel-templates-RPOtkgRf.mjs → channel-templates-DjEsj0_v.mjs} +8 -8
- package/.output/server/chunks/build/{channel-templates-RPOtkgRf.mjs.map → channel-templates-DjEsj0_v.mjs.map} +1 -1
- package/.output/server/chunks/build/checkbox-C4AKj81e.mjs +1 -1
- package/.output/server/chunks/build/constants-HPHJvjne.mjs +6 -6
- package/.output/server/chunks/build/{daq-CPtsh0e7.mjs → daq-N69AOtgw.mjs} +12 -11
- package/.output/server/chunks/build/daq-N69AOtgw.mjs.map +1 -0
- package/.output/server/chunks/build/{dcw-ry5Gyw6Y.mjs → dcw-CN9d3Rs7.mjs} +10 -10
- package/.output/server/chunks/build/{dcw-ry5Gyw6Y.mjs.map → dcw-CN9d3Rs7.mjs.map} +1 -1
- package/.output/server/chunks/build/{default-DxOE1eB0.mjs → default-DCf9tn1i.mjs} +38 -30
- package/.output/server/chunks/build/{default-DxOE1eB0.mjs.map → default-DCf9tn1i.mjs.map} +1 -1
- package/.output/server/chunks/build/descriptions-CFaUq4y4.mjs +1 -1
- package/.output/server/chunks/build/drawer-Cfh9_zft.mjs +1 -1
- package/.output/server/chunks/build/dropdown-KdKWCS5K.mjs +1 -1
- package/.output/server/chunks/build/form-uSlNqIAV.mjs +1 -1
- package/.output/server/chunks/build/input-Cr_KFj4T.mjs +1 -1
- package/.output/server/chunks/build/input-number-BRVnxeiA.mjs +1 -1
- package/.output/server/chunks/build/{logs-CeaiO3y9.mjs → logs-BcAjU1Ps.mjs} +12 -11
- package/.output/server/chunks/build/logs-BcAjU1Ps.mjs.map +1 -0
- package/.output/server/chunks/build/menu-BgkRSSx7.mjs +1 -1
- package/.output/server/chunks/build/{monitor-DnuXEIi5.mjs → monitor-DX_K0WMq.mjs} +13 -13
- package/.output/server/chunks/build/{monitor-DnuXEIi5.mjs.map → monitor-DX_K0WMq.mjs.map} +1 -1
- package/.output/server/chunks/build/operations-OFHYXwh4.mjs +282 -0
- package/.output/server/chunks/build/operations-OFHYXwh4.mjs.map +1 -0
- package/.output/server/chunks/build/{pages-Bn90ijKD.mjs → pages-rZKH72eC.mjs} +10 -11
- package/.output/server/chunks/build/pages-rZKH72eC.mjs.map +1 -0
- package/.output/server/chunks/build/{permissions-DL70W1YD.mjs → permissions-BvmodvsO.mjs} +8 -8
- package/.output/server/chunks/build/{permissions-DL70W1YD.mjs.map → permissions-BvmodvsO.mjs.map} +1 -1
- package/.output/server/chunks/build/{plugins-DrsZo--K.mjs → plugins-DSka7-vS.mjs} +9 -9
- package/.output/server/chunks/build/{plugins-DrsZo--K.mjs.map → plugins-DSka7-vS.mjs.map} +1 -1
- package/.output/server/chunks/build/popconfirm-Ox-_2V8A.mjs +1 -1
- package/.output/server/chunks/build/{schedules-VLzNcjnW.mjs → schedules-lo4bfgVt.mjs} +8 -8
- package/.output/server/chunks/build/{schedules-VLzNcjnW.mjs.map → schedules-lo4bfgVt.mjs.map} +1 -1
- package/.output/server/chunks/build/segmented-C61yLHvo.mjs +1 -1
- package/.output/server/chunks/build/select-rdBWytVK.mjs +1 -1
- package/.output/server/chunks/build/{settings-DVAUVMsX.mjs → settings-CAJWvul5.mjs} +32 -13
- package/.output/server/chunks/build/settings-CAJWvul5.mjs.map +1 -0
- package/.output/server/chunks/build/space-B2uhHJG8.mjs +1 -1
- package/.output/server/chunks/build/spin-C2cuvGth.mjs +1 -1
- package/.output/server/chunks/build/switch-DZAUIbIN.mjs +1 -1
- package/.output/server/chunks/build/table-DOFAvY-v.mjs +1 -1
- package/.output/server/chunks/build/tabs-DTeIuZeP.mjs +1 -1
- package/.output/server/chunks/build/tag-CHLGvNM6.mjs +1 -1
- package/.output/server/chunks/build/{teams-Mc07PYO8.mjs → teams-DBBvIToa.mjs} +14 -14
- package/.output/server/chunks/build/{teams-Mc07PYO8.mjs.map → teams-DBBvIToa.mjs.map} +1 -1
- package/.output/server/chunks/build/{tokens-DiwD5qni.mjs → tokens-CloWk4x_.mjs} +12 -12
- package/.output/server/chunks/build/{tokens-DiwD5qni.mjs.map → tokens-CloWk4x_.mjs.map} +1 -1
- package/.output/server/chunks/build/{town-D8VmTCmN.mjs → town-BMlctE4m.mjs} +12 -12
- package/.output/server/chunks/build/{town-D8VmTCmN.mjs.map → town-BMlctE4m.mjs.map} +1 -1
- package/.output/server/chunks/build/types-D6J7slEa.mjs +1 -1
- package/.output/server/chunks/build/{useAgentHarnessOptions-CPn5dzKe.mjs → useAgentHarnessOptions-D6SJ_uUr.mjs} +7 -7
- package/.output/server/chunks/build/{useAgentHarnessOptions-CPn5dzKe.mjs.map → useAgentHarnessOptions-D6SJ_uUr.mjs.map} +1 -1
- package/.output/server/chunks/build/{useAgentTemplateActions-DQWzVnZ0.mjs → useAgentTemplateActions-CdG4g_PF.mjs} +7 -7
- package/.output/server/chunks/build/{useAgentTemplateActions-DQWzVnZ0.mjs.map → useAgentTemplateActions-CdG4g_PF.mjs.map} +1 -1
- package/.output/server/chunks/build/useAgentTemplateDialogState-CZzpu5og.mjs +6 -6
- package/.output/server/chunks/build/{useAgentTemplateForm-vqyiRPtt.mjs → useAgentTemplateForm-a5y-N5sB.mjs} +7 -7
- package/.output/server/chunks/build/{useAgentTemplateForm-vqyiRPtt.mjs.map → useAgentTemplateForm-a5y-N5sB.mjs.map} +1 -1
- package/.output/server/chunks/build/{useAgentTemplatesCatalog-DcQbsOik.mjs → useAgentTemplatesCatalog-pBVcUuN3.mjs} +7 -7
- package/.output/server/chunks/build/{useAgentTemplatesCatalog-DcQbsOik.mjs.map → useAgentTemplatesCatalog-pBVcUuN3.mjs.map} +1 -1
- package/.output/server/chunks/build/useAmlDatasets-BM0lZu40.mjs +6 -6
- package/.output/server/chunks/build/{useAmlEntities-BjXWvFd_.mjs → useAmlEntities-BDQ8TmLL.mjs} +7 -7
- package/.output/server/chunks/build/{useAmlEntities-BjXWvFd_.mjs.map → useAmlEntities-BDQ8TmLL.mjs.map} +1 -1
- package/.output/server/chunks/build/{useAmlEnv-BB7p6x_w.mjs → useAmlEnv-DgTVwpqi.mjs} +7 -7
- package/.output/server/chunks/build/{useAmlEnv-BB7p6x_w.mjs.map → useAmlEnv-DgTVwpqi.mjs.map} +1 -1
- package/.output/server/chunks/build/useAmlExperiments-BtyW32PO.mjs +6 -6
- package/.output/server/chunks/build/{useAmlFormat-WrKuRfw2.mjs → useAmlFormat-C2sl3MGB.mjs} +7 -7
- package/.output/server/chunks/build/{useAmlFormat-WrKuRfw2.mjs.map → useAmlFormat-C2sl3MGB.mjs.map} +1 -1
- package/.output/server/chunks/build/{useAmlJobs-DBuLvWMF.mjs → useAmlJobs-fk-H5Rp5.mjs} +10 -9
- package/.output/server/chunks/build/useAmlJobs-fk-H5Rp5.mjs.map +1 -0
- package/.output/server/chunks/build/{useAmlModels-VurmkBYe.mjs → useAmlModels-hgyVHoAq.mjs} +7 -7
- package/.output/server/chunks/build/{useAmlModels-VurmkBYe.mjs.map → useAmlModels-hgyVHoAq.mjs.map} +1 -1
- package/.output/server/chunks/build/{useAmlNotes-BUdj3X6Y.mjs → useAmlNotes-BjbYNADm.mjs} +7 -7
- package/.output/server/chunks/build/{useAmlNotes-BUdj3X6Y.mjs.map → useAmlNotes-BjbYNADm.mjs.map} +1 -1
- package/.output/server/chunks/build/{useAmlPredict-DFy-Do10.mjs → useAmlPredict-U24-SZNA.mjs} +7 -7
- package/.output/server/chunks/build/{useAmlPredict-DFy-Do10.mjs.map → useAmlPredict-U24-SZNA.mjs.map} +1 -1
- package/.output/server/chunks/build/useDaqAddNode-kW7uTSMQ.mjs +7 -7
- package/.output/server/chunks/build/useDaqDetailBinding-cpBz4hSL.mjs +6 -6
- package/.output/server/chunks/build/useDaqDetailFrames-BZGtKKXW.mjs +6 -6
- package/.output/server/chunks/build/{useDaqDetailHistory-C4_hVeqZ.mjs → useDaqDetailHistory-DtSTfyMi.mjs} +7 -7
- package/.output/server/chunks/build/{useDaqDetailHistory-C4_hVeqZ.mjs.map → useDaqDetailHistory-DtSTfyMi.mjs.map} +1 -1
- package/.output/server/chunks/build/{useDaqDetailNode-Bwid_iA8.mjs → useDaqDetailNode-D_vhG0jF.mjs} +8 -8
- package/.output/server/chunks/build/{useDaqDetailNode-Bwid_iA8.mjs.map → useDaqDetailNode-D_vhG0jF.mjs.map} +1 -1
- package/.output/server/chunks/build/useDaqDetailParams-JfqHvTxr.mjs +7 -7
- package/.output/server/chunks/build/{useDaqFilters-C13836p-.mjs → useDaqFilters-BUQtZ82a.mjs} +8 -8
- package/.output/server/chunks/build/{useDaqFilters-C13836p-.mjs.map → useDaqFilters-BUQtZ82a.mjs.map} +1 -1
- package/.output/server/chunks/build/useDaqNodeWindow-1DWj2H5G.mjs +6 -6
- package/.output/server/chunks/build/useDaqOptimizations-Ct-TSXxy.mjs +6 -6
- package/.output/server/chunks/build/useDaqStream-wOxZcMDA.mjs +1 -1
- package/.output/server/chunks/build/useDaqTemplates-BqQRdrIm.mjs +7 -7
- package/.output/server/chunks/build/{useDashboardCharts-DZysNDUX.mjs → useDashboardCharts-D45083s_.mjs} +7 -7
- package/.output/server/chunks/build/{useDashboardCharts-DZysNDUX.mjs.map → useDashboardCharts-D45083s_.mjs.map} +1 -1
- package/.output/server/chunks/build/{useDashboardData-Ny_wtbo6.mjs → useDashboardData-Do_Vsepa.mjs} +8 -8
- package/.output/server/chunks/build/{useDashboardData-Ny_wtbo6.mjs.map → useDashboardData-Do_Vsepa.mjs.map} +1 -1
- package/.output/server/chunks/build/{useDcwAddNode-C8nE7geh.mjs → useDcwAddNode-C1HDP3yG.mjs} +12 -9
- package/.output/server/chunks/build/useDcwAddNode-C1HDP3yG.mjs.map +1 -0
- package/.output/server/chunks/build/useDcwCards-ETEsHvVy.mjs +6 -6
- package/.output/server/chunks/build/{useDcwDetailScope-BNrpDzbO.mjs → useDcwDetailScope-QTr1G6Oe.mjs} +7 -7
- package/.output/server/chunks/build/{useDcwDetailScope-BNrpDzbO.mjs.map → useDcwDetailScope-QTr1G6Oe.mjs.map} +1 -1
- package/.output/server/chunks/build/{useDcwDetailTemplates-IcKAJ37Y.mjs → useDcwDetailTemplates-Djt-0Vse.mjs} +7 -7
- package/.output/server/chunks/build/{useDcwDetailTemplates-IcKAJ37Y.mjs.map → useDcwDetailTemplates-Djt-0Vse.mjs.map} +1 -1
- package/.output/server/chunks/build/useDcwFilter-FfVlDdyS.mjs +6 -6
- package/.output/server/chunks/build/useDcwLedger-BLoMmcu1.mjs +6 -6
- package/.output/server/chunks/build/useDcwLineMutations-BMC5BTWU.mjs +6 -6
- package/.output/server/chunks/build/{useDcwLineRun-Bpxk4mse.mjs → useDcwLineRun-74gN_s6T.mjs} +7 -7
- package/.output/server/chunks/build/{useDcwLineRun-Bpxk4mse.mjs.map → useDcwLineRun-74gN_s6T.mjs.map} +1 -1
- package/.output/server/chunks/build/useDcwProducts-D-zrMaeV.mjs +6 -6
- package/.output/server/chunks/build/{useDcwQuery-1lYHOaU6.mjs → useDcwQuery-7tX4QYmv.mjs} +7 -7
- package/.output/server/chunks/build/{useDcwQuery-1lYHOaU6.mjs.map → useDcwQuery-7tX4QYmv.mjs.map} +1 -1
- package/.output/server/chunks/build/useDcwQuickActions-C-tgcXIr.mjs +6 -6
- package/.output/server/chunks/build/{useDcwRecipes-BzGOymqz.mjs → useDcwRecipes-FVk5gDLV.mjs} +23 -15
- package/.output/server/chunks/build/useDcwRecipes-FVk5gDLV.mjs.map +1 -0
- package/.output/server/chunks/build/useDcwStream-D04kCV3J.mjs +1 -1
- package/.output/server/chunks/build/{useDcwTemplates-Dsjw9u6U.mjs → useDcwTemplates-LDZffy4u.mjs} +7 -7
- package/.output/server/chunks/build/{useDcwTemplates-Dsjw9u6U.mjs.map → useDcwTemplates-LDZffy4u.mjs.map} +1 -1
- package/.output/server/chunks/build/{useDcwWrites-3RxwN36I.mjs → useDcwWrites-B22mwliK.mjs} +25 -8
- package/.output/server/chunks/build/useDcwWrites-B22mwliK.mjs.map +1 -0
- package/.output/server/chunks/build/useLocalTime-DZ2RAtVs.mjs +49 -0
- package/.output/server/chunks/build/useLocalTime-DZ2RAtVs.mjs.map +1 -0
- package/.output/server/chunks/build/{useLogsFormat-BlwLpyzy.mjs → useLogsFormat-B-o4MHy7.mjs} +7 -7
- package/.output/server/chunks/build/{useLogsFormat-BlwLpyzy.mjs.map → useLogsFormat-B-o4MHy7.mjs.map} +1 -1
- package/.output/server/chunks/build/{useLogsManual-Deev2Cjk.mjs → useLogsManual-COfCyUtj.mjs} +7 -7
- package/.output/server/chunks/build/{useLogsManual-Deev2Cjk.mjs.map → useLogsManual-COfCyUtj.mjs.map} +1 -1
- package/.output/server/chunks/build/useLogsQuery-CRAm2hmS.mjs +6 -6
- package/.output/server/chunks/build/useLogsScope-ClNijVj4.mjs +6 -6
- package/.output/server/chunks/build/{useMonitorColumns-ylxrUNTK.mjs → useMonitorColumns-DhYvkLDq.mjs} +7 -7
- package/.output/server/chunks/build/{useMonitorColumns-ylxrUNTK.mjs.map → useMonitorColumns-DhYvkLDq.mjs.map} +1 -1
- package/.output/server/chunks/build/{useMonitorData-CEpKXoD4.mjs → useMonitorData-guVjMDtR.mjs} +9 -8
- package/.output/server/chunks/build/useMonitorData-guVjMDtR.mjs.map +1 -0
- package/.output/server/chunks/build/{useMonitorFormat-_7zLapf3.mjs → useMonitorFormat-C7lhZe4g.mjs} +13 -12
- package/.output/server/chunks/build/useMonitorFormat-C7lhZe4g.mjs.map +1 -0
- package/.output/server/chunks/build/useMonitorTerminal-Dj4QwRNW.mjs +6 -6
- package/.output/server/chunks/build/useOperationsFeed-CeXeHqUK.mjs +191 -0
- package/.output/server/chunks/build/useOperationsFeed-CeXeHqUK.mjs.map +1 -0
- package/.output/server/chunks/build/{useTeamActions-D6sxdpkP.mjs → useTeamActions-C4n-taBk.mjs} +7 -7
- package/.output/server/chunks/build/{useTeamActions-D6sxdpkP.mjs.map → useTeamActions-C4n-taBk.mjs.map} +1 -1
- package/.output/server/chunks/build/{useTeamAddMemberDialog-Q-ntQ6Vo.mjs → useTeamAddMemberDialog-Cp_z3nMa.mjs} +7 -7
- package/.output/server/chunks/build/{useTeamAddMemberDialog-Q-ntQ6Vo.mjs.map → useTeamAddMemberDialog-Cp_z3nMa.mjs.map} +1 -1
- package/.output/server/chunks/build/{useTeamCreateDialog-D7OMfDTM.mjs → useTeamCreateDialog-C8LKUoe2.mjs} +7 -7
- package/.output/server/chunks/build/{useTeamCreateDialog-D7OMfDTM.mjs.map → useTeamCreateDialog-C8LKUoe2.mjs.map} +1 -1
- package/.output/server/chunks/build/{useTeamDeployDialog-vBRqjiut.mjs → useTeamDeployDialog-wdBVsNWY.mjs} +7 -7
- package/.output/server/chunks/build/{useTeamDeployDialog-vBRqjiut.mjs.map → useTeamDeployDialog-wdBVsNWY.mjs.map} +1 -1
- package/.output/server/chunks/build/useTeamDialogState-CFRUQxAf.mjs +6 -6
- package/.output/server/chunks/build/{useTeamPluginDialog-B8kxewpZ.mjs → useTeamPluginDialog-CIk8G8nI.mjs} +7 -7
- package/.output/server/chunks/build/{useTeamPluginDialog-B8kxewpZ.mjs.map → useTeamPluginDialog-CIk8G8nI.mjs.map} +1 -1
- package/.output/server/chunks/build/{useTeamsCatalog-xRhk7ezA.mjs → useTeamsCatalog-D6TULzmS.mjs} +7 -7
- package/.output/server/chunks/build/{useTeamsCatalog-xRhk7ezA.mjs.map → useTeamsCatalog-D6TULzmS.mjs.map} +1 -1
- package/.output/server/chunks/build/useTokenClipboard-CwQpoFeP.mjs +6 -6
- package/.output/server/chunks/build/{useTokenCreate-DpDcF1Vx.mjs → useTokenCreate-DkYvEQUD.mjs} +7 -7
- package/.output/server/chunks/build/{useTokenCreate-DpDcF1Vx.mjs.map → useTokenCreate-DkYvEQUD.mjs.map} +1 -1
- package/.output/server/chunks/build/{useTokenRename-BRejFrtc.mjs → useTokenRename-DOCP4aeI.mjs} +7 -7
- package/.output/server/chunks/build/{useTokenRename-BRejFrtc.mjs.map → useTokenRename-DOCP4aeI.mjs.map} +1 -1
- package/.output/server/chunks/build/{useTokenReveal-DER2afAS.mjs → useTokenReveal-CybwwflV.mjs} +7 -7
- package/.output/server/chunks/build/{useTokenReveal-DER2afAS.mjs.map → useTokenReveal-CybwwflV.mjs.map} +1 -1
- package/.output/server/chunks/build/{useTokensList-DHt65IOY.mjs → useTokensList-BLiMvrc4.mjs} +7 -7
- package/.output/server/chunks/build/{useTokensList-DHt65IOY.mjs.map → useTokensList-BLiMvrc4.mjs.map} +1 -1
- package/.output/server/chunks/build/{useWorkbenchAuth-B2j-zILO.mjs → useWorkbenchAuth-DqjBX-6w.mjs} +7 -7
- package/.output/server/chunks/build/{useWorkbenchAuth-B2j-zILO.mjs.map → useWorkbenchAuth-DqjBX-6w.mjs.map} +1 -1
- package/.output/server/chunks/build/{useWorkbenchWorkspaces-B_2mOxN6.mjs → useWorkbenchWorkspaces-DgiSCzsX.mjs} +10 -9
- package/.output/server/chunks/build/useWorkbenchWorkspaces-DgiSCzsX.mjs.map +1 -0
- package/.output/server/chunks/build/{useWorkshopWs-B-Es2Xg3.mjs → useWorkshopWs-Bm80bLn7.mjs} +8 -7
- package/.output/server/chunks/build/useWorkshopWs-Bm80bLn7.mjs.map +1 -0
- package/.output/server/chunks/build/{useWorkspaceAuth-tQ1ORWXo.mjs → useWorkspaceAuth-Dlvj9csD.mjs} +8 -8
- package/.output/server/chunks/build/{useWorkspaceAuth-tQ1ORWXo.mjs.map → useWorkspaceAuth-Dlvj9csD.mjs.map} +1 -1
- package/.output/server/chunks/build/{useWorkspaceChannels-BwB6TAWY.mjs → useWorkspaceChannels-D61Al2dr.mjs} +11 -10
- package/.output/server/chunks/build/useWorkspaceChannels-D61Al2dr.mjs.map +1 -0
- package/.output/server/chunks/build/{useWorkspacePanels-CuAmDpT5.mjs → useWorkspacePanels-CTwREmq0.mjs} +8 -8
- package/.output/server/chunks/build/{useWorkspacePanels-CuAmDpT5.mjs.map → useWorkspacePanels-CTwREmq0.mjs.map} +1 -1
- package/.output/server/chunks/build/{useWorkspaceShell-CcQ4JlqO.mjs → useWorkspaceShell-BCypjjjE.mjs} +7 -7
- package/.output/server/chunks/build/{useWorkspaceShell-CcQ4JlqO.mjs.map → useWorkspaceShell-BCypjjjE.mjs.map} +1 -1
- package/.output/server/chunks/build/{users-De2HygNt.mjs → users-CCf5PgRs.mjs} +8 -8
- package/.output/server/chunks/build/{users-De2HygNt.mjs.map → users-CCf5PgRs.mjs.map} +1 -1
- package/.output/server/chunks/build/{workshop-CmgpTwyf.mjs → workshop-FQ4YzooB.mjs} +13 -12
- package/.output/server/chunks/build/workshop-FQ4YzooB.mjs.map +1 -0
- package/.output/server/chunks/build/{workspaces-DVIEk1Bl.mjs → workspaces-CmW0cpOt.mjs} +1 -1
- package/.output/server/chunks/build/{workspaces-DVIEk1Bl.mjs.map → workspaces-CmW0cpOt.mjs.map} +1 -1
- package/.output/server/chunks/routes/api/health.get.mjs +6 -6
- package/.output/server/chunks/routes/api/index.get.mjs +7 -7
- package/.output/server/chunks/routes/api/index.post.mjs +7 -7
- package/.output/server/chunks/routes/api/mcp/workshop.mjs +6 -6
- package/.output/server/chunks/routes/api/metrics.mjs +6 -6
- package/.output/server/chunks/routes/api/plugins/_name/_...path_.mjs +6 -6
- package/.output/server/chunks/routes/api/plugins/client/_name_.get.mjs +6 -6
- package/.output/server/chunks/routes/api/plugins/i18n.get.mjs +6 -6
- package/.output/server/chunks/routes/api/plugins/manifest.get.mjs +6 -6
- package/.output/server/chunks/routes/api/system/config-groups/_id_.delete.mjs +6 -6
- package/.output/server/chunks/routes/api/system/config-groups/_id_.patch.mjs +6 -6
- package/.output/server/chunks/routes/api/system/config.get.mjs +6 -6
- package/.output/server/chunks/routes/api/system/index.get.mjs +6 -6
- package/.output/server/chunks/routes/api/system/index.patch.mjs +6 -6
- package/.output/server/chunks/routes/api/system/index.post.mjs +6 -6
- package/.output/server/chunks/routes/api/system/index2.get.mjs +6 -6
- package/.output/server/chunks/routes/api/system/monitor/terminal/ws.mjs +6 -6
- package/.output/server/chunks/routes/api/system/monitor/terminate.post.mjs +6 -6
- package/.output/server/chunks/routes/api/system/monitor.get.mjs +6 -6
- package/.output/server/chunks/routes/api/system/settings/events.get.mjs +6 -6
- package/.output/server/chunks/routes/api/system/settings/reset.post.mjs +6 -6
- package/.output/server/chunks/routes/api/system/timezone.get.mjs +36 -0
- package/.output/server/chunks/routes/api/system/timezone.get.mjs.map +1 -0
- package/.output/server/chunks/routes/api/users/_id_.delete.mjs +7 -7
- package/.output/server/chunks/routes/api/users/_id_.get.mjs +7 -7
- package/.output/server/chunks/routes/api/users/_id_.put.mjs +7 -7
- package/.output/server/chunks/routes/api/users/index.get.mjs +7 -7
- package/.output/server/chunks/routes/api/users/index.post.mjs +7 -7
- package/.output/server/chunks/routes/api/users/login.post.mjs +7 -7
- package/.output/server/chunks/routes/api/users/logout.post.mjs +7 -7
- package/.output/server/chunks/routes/api/users/me.get.mjs +7 -7
- package/.output/server/chunks/routes/api/users/register.post.mjs +7 -7
- package/.output/server/chunks/routes/api/users/setup-status.get.mjs +7 -7
- package/.output/server/chunks/routes/api/users/tokens/_id/token.get.mjs +7 -7
- package/.output/server/chunks/routes/api/users/tokens/_id_.delete.mjs +7 -7
- package/.output/server/chunks/routes/api/users/tokens/_id_.patch.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/_...path_.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.get.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.post.mjs +5 -5
- package/.output/server/chunks/routes/api/workshop/a2a/send.post.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/agent-tools/approvals/_id/decide.post.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.delete.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.patch.mjs +10 -7
- 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/index.get.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/agent-tools/index.post.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/agent-tools/index2.get.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/agent-tools/invoke.post.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/agent-tools/list.get.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/agents/_id_.delete.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/agents/_id_.get.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/agents/_id_.patch.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/agents/subscribe.post.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/aml/datasets/_id/preview.get.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.delete.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.get.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.patch.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/aml/entities/prune.post.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/aml/env/recheck.post.mjs +7 -8
- 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 +7 -8
- 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 +7 -8
- 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 +7 -7
- package/.output/server/chunks/routes/api/workshop/aml/index.post.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/aml/index2.get.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/aml/index2.post.mjs +20 -7
- 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 +7 -8
- 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 +49 -0
- package/.output/server/chunks/routes/api/workshop/aml/index3.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/aml/index4.get.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/aml/index5.get.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/aml/index6.get.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/aml/index7.get.mjs +28 -0
- package/.output/server/chunks/routes/api/workshop/aml/index7.get.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/cancel.post.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/logs.get.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/retry.post.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/aml/jobs/_id_.delete.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/aml/jobs/_id_.get.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/aml/models/_id/predict.post.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/aml/models/_id/promote.post.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/aml/models/_id_.delete.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/aml/models/_id_.patch.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id/train.post.mjs +35 -0
- package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id/train.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id_.delete.mjs +35 -0
- package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id_.delete.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id_.patch.mjs +44 -0
- package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id_.patch.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/aml/twin/providers.get.mjs +46 -0
- package/.output/server/chunks/routes/api/workshop/aml/twin/providers.get.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/approvals/_id/decide.post.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/assets/character/_id_.delete.mjs +5 -5
- package/.output/server/chunks/routes/api/workshop/assets/devices/_id_.delete.mjs +5 -5
- package/.output/server/chunks/routes/api/workshop/assets/index.get.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/assets/index.post.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/assets/index2.get.mjs +5 -5
- package/.output/server/chunks/routes/api/workshop/assets/index2.post.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/audit.get.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/caller.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/channel-templates/_id/instantiate.post.mjs +16 -10
- 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 +6 -6
- package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.get.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.patch.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/channel-templates/from-channel.post.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/channels/_id/activate.post.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.get.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.post.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/_memoryId_.delete.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/search.post.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/model.patch.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/position.patch.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/range.patch.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/stop.post.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.delete.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.patch.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/channels/_id/chat/index.get.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/channels/_id/chat/index.post.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/channels/_id/chat/messages/_messageId/read.post.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/channels/_id/chat/permissions.get.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/channels/_id/events.get.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/channels/_id/index.get.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/channels/_id/index.post.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/channels/_id/index.put.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/channels/_id/index2.get.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/channels/_id/index2.post.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/channels/_id/index3.get.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/channels/_id/index3.post.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/channels/_id/index4.get.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/channels/_id/index4.post.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/channels/_id/index5.get.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/channels/_id/index6.get.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/channels/_id/members/_userId/approve.post.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/channels/_id/members/_userId_.delete.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/channels/_id/members/join.post.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/channels/_id/members/leave.post.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/channels/_id/memories/_memoryId_.delete.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/channels/_id/queue.get.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/channels/_id/terminals.get.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/channels/_id/twin-profile.get.mjs +51 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/twin-profile.get.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/twin-profile.patch.mjs +71 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/twin-profile.patch.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id_.delete.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/channels/index.get.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/channels/index.patch.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/channels.get.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/channels.post.mjs +9 -9
- package/.output/server/chunks/routes/api/workshop/daq/_id/bind.post.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/daq/_id/bindings.put.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/daq/_id/frames/content.get.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/daq/_id/frames.get.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/daq/_id/samples.get.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/daq/_id/test.post.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/daq/_id_.delete.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/daq/_id_.patch.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/daq/alarms/_id/ack.post.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/daq/alarms.get.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/daq/controller.post.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/daq/index.post.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/daq/infra/reconnect.post.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/daq/infra.get.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.delete.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.patch.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/daq/test-driver.post.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/dcw/_id/bind.post.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/dcw/_id/bindings.put.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/dcw/_id/param-ledger.get.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/dcw/_id/read.post.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/dcw/_id/test.post.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/dcw/_id/write.post.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/dcw/_id_.delete.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/dcw/_id_.patch.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/dcw/controller.post.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/dcw/index.get.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/dcw/index.post.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/dcw/index2.get.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/dcw/index2.post.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/dcw/index3.get.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/dcw/index3.post.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/dcw/index4.get.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/dcw/index4.post.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/dcw/index5.get.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/dcw/index5.post.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/dcw/index6.get.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/dcw/journal/node/_nodeId/rollback.post.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/dcw/line/query.get.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/start.post.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/stop.post.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.delete.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.patch.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/judge.post.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/rollback.post.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/series.get.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id_.get.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id/read.post.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id/write.post.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.delete.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.patch.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.delete.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.patch.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/apply.post.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/mark-good.post.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/revert.post.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/rollback-good.post.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/versions.get.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.delete.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/index.patch.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/close.post.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/data.get.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/rollback.post.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.delete.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.patch.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/dcw/test-driver.post.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/device-twins/_id/control.post.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/device-twins/_id/telemetry.post.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/device-twins/_id_.delete.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/device-twins/_id_.patch.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/fs/dirs.get.mjs +5 -5
- package/.output/server/chunks/routes/api/workshop/harnesses/_id/providers.get.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/harnesses.get.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/hitl/pending.get.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/hitl/respond.post.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/index.get.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/index.post.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/index.put.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/index10.get.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/index11.get.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/index12.get.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/index13.get.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/index14.get.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/index2.get.mjs +7 -8
- package/.output/server/chunks/routes/api/workshop/index2.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index2.post.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/index3.get.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/index3.post.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/index4.get.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/index4.post.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/index5.get.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/index5.post.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/index6.get.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/index6.post.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/index7.get.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/index7.post.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/index8.get.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/index8.post.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/index9.get.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/index9.post.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/mailbox/all.get.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/mailbox.get.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/memories/maintenance.post.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/notifications/read.post.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/plugins/_name/disable.post.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/plugins/_name/enable.post.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/plugins/index.get.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/runtime.get.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.delete.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.put.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/scene/layouts.get.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/schedules/_id/run.post.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/schedules/_id/runs.get.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/schedules/_id_.delete.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/schedules/_id_.get.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/schedules/_id_.patch.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/tasks/_id/complete.post.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/tasks/_id/dispatch.post.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/tasks/_id/index.post.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/tasks/_id/reassign.post.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/tasks/_id/report.post.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/tasks/_id/retry.post.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/tasks/_id/update.post.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/tasks/_id_.get.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/tasks.get.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/teams/_id/deploy.post.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/teams/_id/index.get.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/teams/_id/index.post.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/teams/_id/index.put.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/teams/_id/index2.get.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/teams/_id/members/_agentId_.delete.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/teams/_id_.delete.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/teams/_id_.get.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/teams/_id_.patch.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/users/me.get.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/users/register.post.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/workspaces/_id/channel-templates/_tplId_.post.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.delete.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.post.mjs +6 -6
- package/.output/server/chunks/routes/api/workshop/workspaces/index.delete.mjs +6 -6
- package/.output/server/chunks/routes/renderer.mjs +2 -2
- package/.output/server/chunks/virtual/entry.mjs +645 -525
- package/.output/server/chunks/virtual/entry.mjs.map +1 -1
- package/.output/server/chunks/virtual/precomputed.mjs +1 -1
- package/.output/server/index.mjs +6 -6
- package/.output/server/package.json +1 -1
- package/README-zh.md +829 -813
- package/README.md +839 -823
- package/app/components/AppSidebar.vue +1 -0
- package/app/components/aml/AmlModelsTable.vue +180 -173
- package/app/components/daq/DaqDetailFramesTile.vue +140 -139
- package/app/components/daq/DaqDetailHistoryCard.vue +129 -128
- package/app/components/dcw/DcwAddNodeModal.vue +342 -328
- package/app/components/dcw/DcwNodesTable.vue +290 -253
- package/app/components/dcw/DcwQueryCard.vue +252 -251
- package/app/components/dcw/DcwRecipeEditModal.vue +297 -285
- package/app/components/dcw/DcwRecipePanel.vue +371 -367
- package/app/components/operations/OperationsFilterCard.vue +164 -0
- package/app/components/operations/OperationsPageHead.vue +47 -0
- package/app/components/operations/OperationsTimeline.vue +215 -0
- package/app/components/settings/RuntimeFieldRow.vue +207 -189
- package/app/components/workshop/ChatTimeline.vue +596 -569
- package/app/components/workshop/EventBlock.vue +224 -214
- package/app/components/workshop/blocks/ClusterTool.vue +20 -2
- package/app/components/workshop/console/LineOperationsPanel.vue +179 -0
- package/app/components/workshop/console/RightPane.vue +6 -0
- package/app/composables/workshop/event-blocks/constants.ts +48 -2
- package/app/composables/workshop/operation-events.ts +151 -0
- package/app/composables/workshop/useAmlStream.ts +137 -136
- package/app/composables/workshop/useLocalTime.ts +81 -37
- package/app/config/schema.ts +3 -0
- package/app/pages/aml/styles.css +422 -420
- package/app/pages/aml/types.ts +195 -189
- package/app/pages/dcw/[id].vue +300 -297
- package/app/pages/dcw/composables/useDcwAddNode.ts +124 -121
- package/app/pages/dcw/composables/useDcwRecipes.ts +242 -239
- package/app/pages/dcw/composables/useDcwWrites.ts +100 -81
- package/app/pages/monitor/composables/useMonitorData.ts +125 -124
- package/app/pages/monitor/composables/useMonitorFormat.ts +41 -39
- package/app/pages/operations/composables/useOperationsFeed.ts +137 -0
- package/app/pages/operations.vue +61 -0
- package/app/stores/runtime-config.ts +1 -1
- package/app/stores/workshop/chat.ts +434 -434
- package/app/stores/workshop/notifications.ts +288 -288
- package/app/utils/dcw-recipe-form.ts +26 -0
- package/cli/aw.mjs +3 -2
- package/cli/commands/mcp.mjs +154 -0
- package/cli/core/context.mjs +5 -0
- package/config.yml +180 -176
- package/docs/aml.md +112 -111
- package/docs/cli.en.md +447 -445
- package/docs/cli.md +412 -410
- package/docs/mcp.en.md +27 -0
- package/docs/mcp.md +108 -0
- package/docs/plugins.en.md +621 -567
- package/docs/plugins.md +610 -560
- package/docs/sdk.en.md +964 -922
- package/docs/sdk.md +900 -861
- package/i18n/dicts/aml.json +207 -205
- package/i18n/locales/en.ts +37 -0
- package/i18n/locales/zh-CN.ts +37 -0
- package/mcp/aw-mcp-server.mjs +796 -0
- package/mcp/discovery.mjs +227 -0
- package/nuxt.config.ts +2 -0
- package/package.json +181 -172
- package/scripts/.chk-tok +1 -0
- package/scripts/.retrain-body.json +1 -0
- package/scripts/.retrain3-body.json +1 -0
- package/scripts/.rt-tok +1 -0
- package/scripts/.rt3-tok +1 -0
- package/scripts/_audit/.tmp/audit-data/dcw-params.json +15 -0
- package/scripts/_audit/.tmp/audit-data/dcws.json +30 -0
- package/scripts/_audit/aw-mcp-live-e2e.mjs +293 -0
- package/scripts/_audit/dcw-controller-e2e.ts +25 -18
- package/scripts/_audit/dcw-rollback-ledger.ts +4 -1
- package/scripts/_audit/feature-audit-e2e.mjs +339 -0
- package/scripts/_audit/full-e2e-adopt.mjs +238 -0
- package/scripts/_audit/full-e2e-close-loop.mjs +134 -0
- package/scripts/_audit/full-e2e-retrain.mjs +320 -0
- package/scripts/_audit/full-e2e-supplement.mjs +192 -0
- package/scripts/_audit/full-e2e-ui-final.mjs +111 -0
- package/scripts/_audit/full-e2e-ui-mount.mjs +111 -0
- package/scripts/_audit/full-feature-e2e-20260927.mjs +627 -0
- package/scripts/_audit/kb-diag-complete.mjs +261 -0
- package/scripts/_audit/kb-diag-complete2.mjs +271 -0
- package/scripts/_audit/kb-diag-loop-e2e.mjs +357 -0
- package/scripts/_audit/kb-diag-loop-mock.mjs +416 -0
- package/scripts/_audit/kb-diag-loop-v2.mjs +314 -0
- package/scripts/_audit/recipe-save-e2e.mjs +365 -0
- package/scripts/_audit/run.mjs +21 -0
- package/scripts/_audit/runtime-dir-e2e.mjs +393 -0
- package/scripts/_audit/skills-guided-e2e.mjs +316 -0
- package/scripts/_audit/stability-soak.mjs +252 -0
- package/scripts/_aw0748-failclosed-probe.mjs +1 -1
- package/scripts/_aw0748-mock-closedloop.mjs +12 -0
- package/scripts/_aw0748-mock-dispatch-diag.mjs +66 -0
- package/scripts/_dbg-configroot-audit.mjs +86 -84
- package/scripts/_dbg-daq-intervals-func.mjs +115 -94
- package/scripts/_dbg-optloop-ui-shots.mjs +52 -0
- package/scripts/_dbg-param-map-e2e.ts +7 -1
- package/scripts/_dbg-perms-e2e.mjs +11 -1
- package/scripts/_dbg-protocol-matrix.mjs +3 -1
- package/scripts/_dbg-render-regression.mjs +67 -25
- package/scripts/_lib-aml-python-run.mjs +17 -0
- package/scripts/_lint-reflow.mjs +105 -0
- package/scripts/_probe-model-channel-link.cjs +25 -0
- package/scripts/acceptance-aml-hybrid-e2e.ts +396 -0
- package/scripts/acceptance-aml-hybrid-twin.ts +3 -3
- package/scripts/acceptance-aml-model-identity.ts +137 -0
- package/scripts/dev-guard.mjs +4 -2
- package/scripts/dev-protocol-simulators.mjs +3 -2
- package/scripts/e2e-aml-decoupled.mjs +162 -0
- package/scripts/e2e-closedloop/scenarios-accounts.mjs +2 -0
- package/scripts/e2e-closedloop/scenarios-authz.mjs +12 -6
- package/scripts/e2e-closedloop/scenarios-daq-dcw.mjs +4 -1
- package/scripts/e2e-timezone-settings.mjs +57 -0
- package/scripts/live-aml-mockomp.mjs +304 -0
- package/scripts/live-aml-optloop-resume.mjs +322 -0
- package/scripts/live-aml-optloop.mjs +545 -0
- package/scripts/live-aml-stage9.mjs +169 -0
- package/scripts/live-aml-two-goals.mjs +315 -0
- package/scripts/live-optloop-two-modes.mjs +857 -0
- package/scripts/start.mjs +3 -1
- package/scripts/test-aw-skills.mjs +102 -0
- package/scripts/test-twin-plugin-sdk.mjs +30 -0
- package/sdk/context.mjs +305 -0
- package/sdk/index.d.mts +149 -0
- package/sdk/index.mjs +5 -2
- package/server/api/system/timezone.get.ts +20 -0
- package/server/api/workshop/agent-tools/bindings/[id].patch.ts +28 -23
- package/server/api/workshop/aml/jobs/index.post.ts +74 -44
- package/server/api/workshop/aml/training-plans/[id]/train.post.ts +18 -0
- package/server/api/workshop/aml/training-plans/[id].delete.ts +18 -0
- package/server/api/workshop/aml/training-plans/[id].patch.ts +30 -0
- package/server/api/workshop/aml/training-plans/index.get.ts +9 -0
- package/server/api/workshop/aml/training-plans/index.post.ts +43 -0
- package/server/api/workshop/aml/twin/providers.get.ts +33 -0
- package/server/api/workshop/channel-templates/[id]/instantiate.post.ts +8 -2
- package/server/api/workshop/channels/[id]/twin-profile.get.ts +45 -0
- package/server/api/workshop/channels/[id]/twin-profile.patch.ts +72 -0
- package/server/plugins/00-local-time.ts +13 -10
- package/server/plugins/aml-twin-worker.ts +32 -0
- package/server/plugins/aw-plugins.ts +16 -0
- package/server/plugins/workshop.ts +21 -0
- package/server/plugins-builtin/twin-injection-default/index.mjs +23 -0
- package/server/services/system-config/helpers.ts +42 -41
- package/server/services/system-config/recompute.ts +68 -66
- package/server/services/workshop/agents/host-tool-bridge/catalog.ts +50 -18
- package/server/services/workshop/agents/host-tool-bridge/dispatch.ts +51 -5
- package/server/services/workshop/agents/host-tool-bridge/tools/industrial.ts +19 -6
- package/server/services/workshop/agents/industrial/aml-dataset-tools.ts +276 -276
- package/server/services/workshop/agents/industrial/aml-job-tools.ts +549 -363
- package/server/services/workshop/agents/industrial/audit-query.ts +30 -0
- package/server/services/workshop/agents/industrial/dcw-judge-tools.ts +9 -13
- package/server/services/workshop/agents/industrial/dcw-tools.ts +208 -213
- package/server/services/workshop/agents/industrial/index.ts +3 -2
- package/server/services/workshop/agents/industrial/manual-approval.ts +45 -0
- package/server/services/workshop/agents/industrial/ops-tools.ts +370 -382
- package/server/services/workshop/agents/industrial/optimization-tools.ts +148 -0
- package/server/services/workshop/agents/industrial/param-tools.ts +169 -172
- package/server/services/workshop/agents/industrial/twin-tools.ts +618 -61
- package/server/services/workshop/agents/industrial-context.ts +4 -2
- package/server/services/workshop/agents/node-bindings.repo.ts +35 -2
- package/server/services/workshop/agents/tool-classes.ts +28 -0
- package/server/services/workshop/aml/aml.repo.ts +412 -386
- package/server/services/workshop/aml/job-orchestrator/stages.ts +108 -96
- package/server/services/workshop/aml/job-orchestrator/start-job.ts +29 -5
- package/server/services/workshop/aml/job-orchestrator/submit.ts +36 -1
- package/server/services/workshop/aml/model-registry.ts +265 -175
- package/server/services/workshop/aml/predictor.ts +336 -262
- package/server/services/workshop/aml/python/__pycache__/aml_eval.cpython-312.pyc +0 -0
- package/server/services/workshop/aml/python/__pycache__/amlkit.cpython-312.pyc +0 -0
- package/server/services/workshop/aml/python/__pycache__/train-example.cpython-312.pyc +0 -0
- package/server/services/workshop/aml/python/__pycache__/train-hybrid-example.cpython-312.pyc +0 -0
- package/server/services/workshop/aml/python/aml_eval.py +39 -6
- package/server/services/workshop/aml/python/amlkit.py +222 -3
- package/server/services/workshop/aml/python/train-hybrid-example.py +278 -32
- package/server/services/workshop/aml/runtime.ts +4 -3
- package/server/services/workshop/aml/twin/acceptance.ts +26 -0
- package/server/services/workshop/aml/twin/binding-snapshot.ts +603 -0
- package/server/services/workshop/aml/twin/calibration-worker.ts +150 -0
- package/server/services/workshop/aml/twin/channel-profile.ts +80 -7
- package/server/services/workshop/aml/twin/contracts.ts +3 -0
- package/server/services/workshop/aml/twin/declarative-provider.ts +108 -0
- package/server/services/workshop/aml/twin/feature-flags.ts +63 -0
- package/server/services/workshop/aml/twin/hybrid-provider.ts +86 -0
- package/server/services/workshop/aml/twin/model-backed-provider.ts +332 -0
- package/server/services/workshop/aml/twin/physics-spec-draft.ts +185 -0
- package/server/services/workshop/aml/twin/physics-spec.ts +338 -0
- package/server/services/workshop/aml/twin/prompt-composer.ts +143 -0
- package/server/services/workshop/aml/twin/provider-contracts.ts +98 -34
- package/server/services/workshop/aml/twin/provider-health.ts +69 -8
- package/server/services/workshop/aml/twin/provider-loader.ts +76 -45
- package/server/services/workshop/aml/twin/provider-registry.ts +670 -49
- package/server/services/workshop/aml/twin/repo.ts +63 -4
- package/server/services/workshop/aml/twin/scene-builder.ts +118 -0
- package/server/services/workshop/aml/twin/scene-lifecycle.ts +60 -0
- package/server/services/workshop/aml/twin/snapshot-service.ts +395 -22
- package/server/services/workshop/aml/twin/training-plans.ts +260 -0
- package/server/services/workshop/aml/twin/trial-service.ts +97 -13
- package/server/services/workshop/aml/twin/write-guard.ts +20 -0
- package/server/services/workshop/daq/daq-controller/state.ts +8 -5
- package/server/services/workshop/daq/drivers/registry.ts +116 -144
- package/server/services/workshop/db/database/migrations.ts +40 -0
- package/server/services/workshop/db/database/open.ts +4 -1
- package/server/services/workshop/db/database/schema.ts +68 -1
- package/server/services/workshop/db/database/seed.ts +22 -0
- package/server/services/workshop/db/readonly.ts +30 -0
- package/server/services/workshop/dcw/dcw-controller/crud.ts +162 -152
- package/server/services/workshop/dcw/dcw-controller/helpers.ts +61 -57
- package/server/services/workshop/dcw/dcw-controller/types.ts +61 -57
- package/server/services/workshop/dcw/dcw-controller/write-audit.ts +49 -0
- package/server/services/workshop/dcw/dcw-controller/write.ts +137 -147
- package/server/services/workshop/dcw/dcw-node.ts +18 -2
- package/server/services/workshop/dcw/dcw-recipe.repo.ts +5 -0
- package/server/services/workshop/dcw/dcw-runtime.ts +9 -3
- package/server/services/workshop/dcw/drivers/index.ts +2 -1
- package/server/services/workshop/dcw/drivers/modbus-rtu.ts +85 -93
- package/server/services/workshop/dcw/drivers/modbus.ts +131 -139
- package/server/services/workshop/dcw/drivers/opcua.ts +103 -110
- package/server/services/workshop/dcw/drivers/registry.ts +25 -45
- package/server/services/workshop/dcw/drivers/shared.ts +24 -6
- package/server/services/workshop/dcw/param-limits.ts +193 -142
- package/server/services/workshop/dcw/param-map.repo.ts +318 -305
- package/server/services/workshop/plugin-driver-registry.ts +108 -0
- package/server/services/workshop/runtime/manager/admin-channel.ts +13 -0
- package/server/services/workshop/runtime/manager/channel-templates.ts +29 -2
- package/server/services/workshop/runtime/manager/runtime-wiring.ts +8 -0
- package/server/services/workshop/runtime/permission-scope.ts +79 -81
- package/server/services/workshop/runtime/schedule-runtime.ts +33 -6
- package/server/utils/errors.ts +8 -0
- package/shared/config/engine.mjs +5 -0
- package/shared/config/home.mjs +15 -20
- package/shared/config/schema.json +135 -133
- package/shared/dcw-protocol/line.ts +133 -131
- package/shared/dcw-protocol/recipe.ts +311 -301
- package/shared/local-time.mjs +116 -36
- package/.output/public/_nuxt/-hB4kEmt.js +0 -1
- package/.output/public/_nuxt/74x7BOWv2.js +0 -1
- package/.output/public/_nuxt/9c5GOgbu.js +0 -1
- package/.output/public/_nuxt/BHwG4yNs.js +0 -1
- package/.output/public/_nuxt/BIOq3xqe2.js +0 -1
- package/.output/public/_nuxt/BL_dbd2v2.js +0 -1
- package/.output/public/_nuxt/BNnnYEYh2.js +0 -1
- package/.output/public/_nuxt/BxYTM0hb.js +0 -1
- package/.output/public/_nuxt/C3twEwTh2.js +0 -1
- package/.output/public/_nuxt/CGZVhYJ4.js +0 -1
- package/.output/public/_nuxt/CJRDL4EG.js +0 -1
- package/.output/public/_nuxt/CKQPwwZa2.js +0 -1
- package/.output/public/_nuxt/CeWnOF3O.js +0 -1
- package/.output/public/_nuxt/ChoLwR-s.js +0 -1
- package/.output/public/_nuxt/DGw8juu_.js +0 -2
- package/.output/public/_nuxt/DJdDFnjG2.js +0 -1
- package/.output/public/_nuxt/DXIaadqv.js +0 -1
- package/.output/public/_nuxt/D_7AzAWe.js +0 -1
- package/.output/public/_nuxt/DdvQ7LRI.js +0 -14
- package/.output/public/_nuxt/DeYsUzhr.js +0 -1
- package/.output/public/_nuxt/DkLCjrCk2.js +0 -47
- package/.output/public/_nuxt/DpqA8D8_.js +0 -1
- package/.output/public/_nuxt/DqtgGFEc.js +0 -1
- package/.output/public/_nuxt/Dy3oXKdn2.js +0 -1
- package/.output/public/_nuxt/PLGqdko0.js +0 -1
- package/.output/public/_nuxt/U8oQxruK.js +0 -1
- package/.output/public/_nuxt/WleoCtUX.js +0 -1
- package/.output/public/_nuxt/ZvXovq7N2.js +0 -1
- package/.output/public/_nuxt/_id_.Bossmhv1.css +0 -1
- package/.output/public/_nuxt/_wsId_.D-u-dbP9.css +0 -1
- package/.output/public/_nuxt/aml.Bi5X6_oi.css +0 -1
- package/.output/public/_nuxt/builds/meta/0530cee1-fff5-4025-a6f4-5708b6534608.json +0 -1
- package/.output/public/_nuxt/cDcDztgb2.js +0 -1
- package/.output/public/_nuxt/e7BBCLxr.js +0 -1
- package/.output/public/_nuxt/hkMGMTqt.js +0 -1
- package/.output/public/_nuxt/ikAUnxx3.js +0 -1
- package/.output/public/_nuxt/y9kob70X.js +0 -1
- package/.output/server/chunks/_/env-manager.mjs +0 -162
- package/.output/server/chunks/_/env-manager.mjs.map +0 -1
- package/.output/server/chunks/build/_id_-DgMpjM3_.mjs.map +0 -1
- package/.output/server/chunks/build/_id_-Dv3BQbYV.mjs.map +0 -1
- package/.output/server/chunks/build/_wsId_-BKJvFmyf.mjs.map +0 -1
- package/.output/server/chunks/build/aml-DdWicH3t.mjs.map +0 -1
- package/.output/server/chunks/build/client-only-qNA2OVV_.mjs +0 -43
- package/.output/server/chunks/build/client-only-qNA2OVV_.mjs.map +0 -1
- package/.output/server/chunks/build/daq-CPtsh0e7.mjs.map +0 -1
- package/.output/server/chunks/build/logs-CeaiO3y9.mjs.map +0 -1
- package/.output/server/chunks/build/pages-Bn90ijKD.mjs.map +0 -1
- package/.output/server/chunks/build/settings-DVAUVMsX.mjs.map +0 -1
- package/.output/server/chunks/build/useAmlJobs-DBuLvWMF.mjs.map +0 -1
- package/.output/server/chunks/build/useDcwAddNode-C8nE7geh.mjs.map +0 -1
- package/.output/server/chunks/build/useDcwRecipes-BzGOymqz.mjs.map +0 -1
- package/.output/server/chunks/build/useDcwWrites-3RxwN36I.mjs.map +0 -1
- package/.output/server/chunks/build/useLocalTime-9a4B-aHv.mjs +0 -35
- package/.output/server/chunks/build/useLocalTime-9a4B-aHv.mjs.map +0 -1
- package/.output/server/chunks/build/useMonitorData-CEpKXoD4.mjs.map +0 -1
- package/.output/server/chunks/build/useMonitorFormat-_7zLapf3.mjs.map +0 -1
- package/.output/server/chunks/build/useWorkbenchWorkspaces-B_2mOxN6.mjs.map +0 -1
- package/.output/server/chunks/build/useWorkshopWs-B-Es2Xg3.mjs.map +0 -1
- package/.output/server/chunks/build/useWorkspaceChannels-BwB6TAWY.mjs.map +0 -1
- package/.output/server/chunks/build/workshop-CmgpTwyf.mjs.map +0 -1
- /package/.output/public/_nuxt/{B2x8SKRO.js → B2x8SKRO2.js} +0 -0
- /package/.output/public/_nuxt/{BzvHUfRR2.js → BzvHUfRR.js} +0 -0
- /package/.output/public/_nuxt/{DPUXbTg92.js → DPUXbTg9.js} +0 -0
- /package/.output/public/_nuxt/{DdNujZN5.js → DdNujZN52.js} +0 -0
- /package/.output/public/_nuxt/{DlUQa0wn2.js → DlUQa0wn.js} +0 -0
- /package/.output/public/_nuxt/{Du9v6qGB.js → Du9v6qGB2.js} +0 -0
- /package/.output/public/_nuxt/{TOWR4WpO.js → TOWR4WpO2.js} +0 -0
- /package/.output/public/_nuxt/{cBI0JqsV2.js → cBI0JqsV.js} +0 -0
- /package/.output/public/_nuxt/{zh-S_7rN.js → zh-S_7rN2.js} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"datasetId": "ds-muhrindr-0a4b2s", "purpose": "mpc_surrogate", "changeNote": "live 闭环优化(重训v3):加深加长训练", "params": {"epochs": 600, "hidden": 192, "lr": 0.0008, "residual_scale": 2.5, "ensemble": 3}, "seed": 7, "jobKind": "hybrid_residual", "sceneId": "castfilm-hold-opt-0926T0155", "sceneVersion": "1.0.0", "objectiveId": "thickness-50um", "physicsSpec": {"specVersion": "physics-spec.v1", "modelId": "draft-castfilm-hold-opt-0926T0155", "sceneId": "castfilm-hold-opt-0926T0155", "version": "0.1.0-skeleton", "variables": [{"id": "node_3bb27a47f55e26fb", "nodeId": "dn-7ef0f578", "role": "control", "unit": "m/min", "physicalMeaning": "cast-film 执行器 lineSpeedSP(m/min),真实 mqtt 链路", "min": 20, "max": 120}, {"id": "node_82be092f2cdf43f4", "nodeId": "dn-07c80fca", "role": "control", "unit": "℃", "physicalMeaning": "cast-film 执行器 加热区2SP(℃),真实 modbus-tcp 链路", "min": 120, "max": 260}, {"id": "node_09ee97dc03e102a7", "nodeId": "dn-c0f744b4", "role": "control", "unit": "rpm", "physicalMeaning": "cast-film 执行器 ScrewSpeedSP(rpm),真实 opcua 链路", "min": 50, "max": 200}, {"id": "node_45c7316fe5067dfd", "nodeId": "dn-55e11078", "role": "control", "unit": "℃", "physicalMeaning": "cast-film 执行器 加热区3SP(℃),真实 modbus-tcp 链路", "min": 120, "max": 260}, {"id": "node_ca64b4f10ae9cd2c", "nodeId": "dn-270f4657", "role": "control", "unit": "mm", "physicalMeaning": "cast-film 执行器 dieGapSP(mm),真实 http 链路", "min": 0.5, "max": 2}, {"id": "node_d1298f9e18c09b4d", "nodeId": "dn-adee727b", "role": "control", "unit": "℃", "physicalMeaning": "cast-film 执行器 加热区1SP(℃),真实 modbus-tcp 链路", "min": 120, "max": 260}, {"id": "node_64addec8c583207d", "nodeId": "dn-65f7cc9f", "role": "state", "unit": "MPa", "physicalMeaning": "cast-film process quantity MeltPressure(MPa),真实 opcua 链路", "min": 0, "max": 45}, {"id": "node_b81b49c07f742cfb", "nodeId": "dn-feb43d80", "role": "state", "unit": "℃", "physicalMeaning": "cast-film process quantity 熔体温度(℃),真实 modbus-tcp 链路", "min": 0, "max": 400}, {"id": "node_cd2d2d09b5fd7d72", "nodeId": "dn-a0d54660", "role": "state", "unit": "μm", "physicalMeaning": "流延膜厚度测量(优化目标 goal,单位 μm;厚度质量输出)", "min": 0, "max": 400}], "parameters": [{"id": "tau_node_c0dd251fc92a16d5", "value": 5, "min": 0.5, "max": 600, "unit": "s"}, {"id": "offset_node_c0dd251fc92a16d5", "value": 250, "min": -500, "max": 500, "unit": "个/m²"}, {"id": "gain_node_c0dd251fc92a16d5_by_node_3bb27a47f55e26fb", "value": 0, "min": -10, "max": 10}, {"id": "gain_node_c0dd251fc92a16d5_by_node_82be092f2cdf43f4", "value": 0, "min": -7.142857142857143, "max": 7.142857142857143}, {"id": "gain_node_c0dd251fc92a16d5_by_node_09ee97dc03e102a7", "value": 0, "min": -6.666666666666667, "max": 6.666666666666667}, {"id": "gain_node_c0dd251fc92a16d5_by_node_45c7316fe5067dfd", "value": 0, "min": -7.142857142857143, "max": 7.142857142857143}, {"id": "gain_node_c0dd251fc92a16d5_by_node_ca64b4f10ae9cd2c", "value": 0, "min": -666.6666666666666, "max": 666.6666666666666}, {"id": "gain_node_c0dd251fc92a16d5_by_node_d1298f9e18c09b4d", "value": 0, "min": -7.142857142857143, "max": 7.142857142857143}, {"id": "tau_node_64addec8c583207d", "value": 5, "min": 0.5, "max": 600, "unit": "s"}, {"id": "offset_node_64addec8c583207d", "value": 22.5, "min": -45, "max": 45, "unit": "MPa"}, {"id": "gain_node_64addec8c583207d_by_node_3bb27a47f55e26fb", "value": 0, "min": -0.9, "max": 0.9}, {"id": "gain_node_64addec8c583207d_by_node_82be092f2cdf43f4", "value": 0, "min": -0.6428571428571429, "max": 0.6428571428571429}, {"id": "gain_node_64addec8c583207d_by_node_09ee97dc03e102a7", "value": 0, "min": -0.6, "max": 0.6}, {"id": "gain_node_64addec8c583207d_by_node_45c7316fe5067dfd", "value": 0, "min": -0.6428571428571429, "max": 0.6428571428571429}, {"id": "gain_node_64addec8c583207d_by_node_ca64b4f10ae9cd2c", "value": 0, "min": -60, "max": 60}, {"id": "gain_node_64addec8c583207d_by_node_d1298f9e18c09b4d", "value": 0, "min": -0.6428571428571429, "max": 0.6428571428571429}, {"id": "tau_node_b81b49c07f742cfb", "value": 5, "min": 0.5, "max": 600, "unit": "s"}, {"id": "offset_node_b81b49c07f742cfb", "value": 200, "min": -400, "max": 400, "unit": "℃"}, {"id": "gain_node_b81b49c07f742cfb_by_node_3bb27a47f55e26fb", "value": 0, "min": -8, "max": 8}, {"id": "gain_node_b81b49c07f742cfb_by_node_82be092f2cdf43f4", "value": 0, "min": -5.714285714285714, "max": 5.714285714285714}, {"id": "gain_node_b81b49c07f742cfb_by_node_09ee97dc03e102a7", "value": 0, "min": -5.333333333333333, "max": 5.333333333333333}, {"id": "gain_node_b81b49c07f742cfb_by_node_45c7316fe5067dfd", "value": 0, "min": -5.714285714285714, "max": 5.714285714285714}, {"id": "gain_node_b81b49c07f742cfb_by_node_ca64b4f10ae9cd2c", "value": 0, "min": -533.3333333333334, "max": 533.3333333333334}, {"id": "gain_node_b81b49c07f742cfb_by_node_d1298f9e18c09b4d", "value": 0, "min": -5.714285714285714, "max": 5.714285714285714}, {"id": "tau_node_cd2d2d09b5fd7d72", "value": 5, "min": 0.5, "max": 600, "unit": "s"}, {"id": "offset_node_cd2d2d09b5fd7d72", "value": 200, "min": -400, "max": 400, "unit": "μm"}, {"id": "gain_node_cd2d2d09b5fd7d72_by_node_3bb27a47f55e26fb", "value": 0, "min": -8, "max": 8}, {"id": "gain_node_cd2d2d09b5fd7d72_by_node_82be092f2cdf43f4", "value": 0, "min": -5.714285714285714, "max": 5.714285714285714}, {"id": "gain_node_cd2d2d09b5fd7d72_by_node_09ee97dc03e102a7", "value": 0, "min": -5.333333333333333, "max": 5.333333333333333}, {"id": "gain_node_cd2d2d09b5fd7d72_by_node_45c7316fe5067dfd", "value": 0, "min": -5.714285714285714, "max": 5.714285714285714}, {"id": "gain_node_cd2d2d09b5fd7d72_by_node_ca64b4f10ae9cd2c", "value": 0, "min": -533.3333333333334, "max": 533.3333333333334}, {"id": "gain_node_cd2d2d09b5fd7d72_by_node_d1298f9e18c09b4d", "value": 0, "min": -5.714285714285714, "max": 5.714285714285714}], "states": [{"lhs": "node_64addec8c583207d_next", "rhs": {"op": "div", "args": [{"op": "sub", "args": [{"op": "clamp", "args": [{"op": "add", "args": [{"param": "offset_node_64addec8c583207d"}, {"op": "mul", "args": [{"param": "gain_node_64addec8c583207d_by_node_3bb27a47f55e26fb"}, {"ref": "node_3bb27a47f55e26fb"}]}, {"op": "mul", "args": [{"param": "gain_node_64addec8c583207d_by_node_82be092f2cdf43f4"}, {"ref": "node_82be092f2cdf43f4"}]}, {"op": "mul", "args": [{"param": "gain_node_64addec8c583207d_by_node_09ee97dc03e102a7"}, {"ref": "node_09ee97dc03e102a7"}]}, {"op": "mul", "args": [{"param": "gain_node_64addec8c583207d_by_node_45c7316fe5067dfd"}, {"ref": "node_45c7316fe5067dfd"}]}, {"op": "mul", "args": [{"param": "gain_node_64addec8c583207d_by_node_ca64b4f10ae9cd2c"}, {"ref": "node_ca64b4f10ae9cd2c"}]}, {"op": "mul", "args": [{"param": "gain_node_64addec8c583207d_by_node_d1298f9e18c09b4d"}, {"ref": "node_d1298f9e18c09b4d"}]}]}, {"value": 0}, {"value": 45}]}, {"ref": "node_64addec8c583207d"}]}, {"param": "tau_node_64addec8c583207d"}]}}, {"lhs": "node_b81b49c07f742cfb_next", "rhs": {"op": "div", "args": [{"op": "sub", "args": [{"op": "clamp", "args": [{"op": "add", "args": [{"param": "offset_node_b81b49c07f742cfb"}, {"op": "mul", "args": [{"param": "gain_node_b81b49c07f742cfb_by_node_3bb27a47f55e26fb"}, {"ref": "node_3bb27a47f55e26fb"}]}, {"op": "mul", "args": [{"param": "gain_node_b81b49c07f742cfb_by_node_82be092f2cdf43f4"}, {"ref": "node_82be092f2cdf43f4"}]}, {"op": "mul", "args": [{"param": "gain_node_b81b49c07f742cfb_by_node_09ee97dc03e102a7"}, {"ref": "node_09ee97dc03e102a7"}]}, {"op": "mul", "args": [{"param": "gain_node_b81b49c07f742cfb_by_node_45c7316fe5067dfd"}, {"ref": "node_45c7316fe5067dfd"}]}, {"op": "mul", "args": [{"param": "gain_node_b81b49c07f742cfb_by_node_ca64b4f10ae9cd2c"}, {"ref": "node_ca64b4f10ae9cd2c"}]}, {"op": "mul", "args": [{"param": "gain_node_b81b49c07f742cfb_by_node_d1298f9e18c09b4d"}, {"ref": "node_d1298f9e18c09b4d"}]}]}, {"value": 0}, {"value": 400}]}, {"ref": "node_b81b49c07f742cfb"}]}, {"param": "tau_node_b81b49c07f742cfb"}]}}, {"lhs": "node_cd2d2d09b5fd7d72_next", "rhs": {"op": "div", "args": [{"op": "sub", "args": [{"op": "clamp", "args": [{"op": "add", "args": [{"param": "offset_node_cd2d2d09b5fd7d72"}, {"op": "mul", "args": [{"param": "gain_node_cd2d2d09b5fd7d72_by_node_3bb27a47f55e26fb"}, {"ref": "node_3bb27a47f55e26fb"}]}, {"op": "mul", "args": [{"param": "gain_node_cd2d2d09b5fd7d72_by_node_82be092f2cdf43f4"}, {"ref": "node_82be092f2cdf43f4"}]}, {"op": "mul", "args": [{"param": "gain_node_cd2d2d09b5fd7d72_by_node_09ee97dc03e102a7"}, {"ref": "node_09ee97dc03e102a7"}]}, {"op": "mul", "args": [{"param": "gain_node_cd2d2d09b5fd7d72_by_node_45c7316fe5067dfd"}, {"ref": "node_45c7316fe5067dfd"}]}, {"op": "mul", "args": [{"param": "gain_node_cd2d2d09b5fd7d72_by_node_ca64b4f10ae9cd2c"}, {"ref": "node_ca64b4f10ae9cd2c"}]}, {"op": "mul", "args": [{"param": "gain_node_cd2d2d09b5fd7d72_by_node_d1298f9e18c09b4d"}, {"ref": "node_d1298f9e18c09b4d"}]}]}, {"value": 0}, {"value": 400}]}, {"ref": "node_cd2d2d09b5fd7d72"}]}, {"param": "tau_node_cd2d2d09b5fd7d72"}]}}], "observations": [{"lhs": "node_cd2d2d09b5fd7d72", "rhs": {"ref": "node_cd2d2d09b5fd7d72"}, "unit": "μm"}], "guards": [], "constraints": [{"id": "node_cd2d2d09b5fd7d72", "kind": "hard_range", "min": 0, "max": 400}], "monotonicity": [], "delays": [], "sampling": {"horizonSteps": 4}, "solver": {"method": "ode", "dtSec": 1, "stabilityPolicy": "reject_unstable"}, "provenance": {"createdBy": "71396663-68f2-43de-80b6-a92b48ed5486", "createdAt": "2026-09-26T10:20:25.219+08:00", "evidence": ["auto skeleton from frozen SceneContract castfilm-hold-opt-0926T0155@1.0.0 hash=df78d3f3c44beec8a37d538c4705e3b4e48b96f320793393942e58229e802e97", "per-state first-order lag with calibratable tau/gains; identity observations (persistence baseline)", "refine equations via twin_physics_spec_validate before compile/train"]}}, "providerId": "draft-castfilm-hold-opt-0926T0155", "providerVersion": "1.0.0", "providerHash": "sha256:8713", "modelName": "流延膜厚闭环模型 0926T0155-v3", "modelDescription": "输入=全部 DCW 设定点回读;输出=膜厚 goal(50μm);加深集成训练"}
|
package/scripts/.rt-tok
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ut-33c46a988e2940cabd953dfe775059a8
|
package/scripts/.rt3-tok
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ut-9d89b7021a7948ddb369460c8e93bff7
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"id": "pp-631395ac",
|
|
4
|
+
"key": "temp-sp",
|
|
5
|
+
"name": "温度设定器 01",
|
|
6
|
+
"templateRef": "temp-sp",
|
|
7
|
+
"unit": "℃",
|
|
8
|
+
"decimals": 1,
|
|
9
|
+
"min": null,
|
|
10
|
+
"max": null,
|
|
11
|
+
"stepLimit": 1,
|
|
12
|
+
"nodeId": "dw-6eb7585a",
|
|
13
|
+
"createdAt": "2026-09-26T18:46:15.782Z"
|
|
14
|
+
}
|
|
15
|
+
]
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"id": "dw-6eb7585a",
|
|
4
|
+
"templateRef": "temp-sp",
|
|
5
|
+
"name": "温度设定器 01",
|
|
6
|
+
"driver": "mock",
|
|
7
|
+
"enabled": true,
|
|
8
|
+
"holdIntervalMs": null,
|
|
9
|
+
"readIntervalMs": null,
|
|
10
|
+
"writeLockSeconds": 60,
|
|
11
|
+
"stepLimit": 1,
|
|
12
|
+
"unit": "℃",
|
|
13
|
+
"decimals": 2,
|
|
14
|
+
"min": 150,
|
|
15
|
+
"max": 200,
|
|
16
|
+
"deviceBindingId": null,
|
|
17
|
+
"deviceIds": [],
|
|
18
|
+
"driverConfig": {},
|
|
19
|
+
"lineId": "",
|
|
20
|
+
"value": 160,
|
|
21
|
+
"readValue": null,
|
|
22
|
+
"lastReadAt": null,
|
|
23
|
+
"lastReadError": null,
|
|
24
|
+
"lastAckAt": "2026-09-26T18:46:15.783Z",
|
|
25
|
+
"lastWriteAt": "2026-09-26T18:46:15.783Z",
|
|
26
|
+
"state": "ok",
|
|
27
|
+
"lastError": null,
|
|
28
|
+
"createdAt": "2026-09-26T18:46:15.780Z"
|
|
29
|
+
}
|
|
30
|
+
]
|
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* scripts/_audit/aw-mcp-live-e2e.mjs —— aw 工业 MCP 的真实实例端到端验收。
|
|
4
|
+
*
|
|
5
|
+
* 场景:起一个**完全隔离**的 home 模式实例(全新 AW_HOME,不碰真实库),
|
|
6
|
+
* 不给 AW_BASE_URL/AW_PORT,然后拉起 stdio MCP server 子进程 —— 验证它能:
|
|
7
|
+
* A. 从锁文件 .runtime/aw.lock **自动发现**实例真实端口
|
|
8
|
+
* B. JSON-RCP 面:initialize / tools/list / aw_status / 懒登录 / 关键工具调用
|
|
9
|
+
* C. 全链业务:建产线 → 建产品 → 建 DCW/DAQ 节点(回路驱动)→ 建参数映射查证
|
|
10
|
+
* → 配方开跑 → 写读回环 → 数采采样 → 建优化频道 → 模板列表 → 插件清单
|
|
11
|
+
* D. 守卫:aw_request 拒绝非 /api/ 路径
|
|
12
|
+
*
|
|
13
|
+
* 隔离纪律:AW_MODE=home + AW_HOME=临时目录;端口 3461;结束 taskkill //T 清场。
|
|
14
|
+
* 用法:node scripts/_audit/aw-mcp-live-e2e.mjs [--keep]
|
|
15
|
+
*/
|
|
16
|
+
import { spawn, spawnSync } from 'node:child_process'
|
|
17
|
+
import { closeSync, existsSync, mkdtempSync, openSync, readFileSync, rmSync, writeFileSync } from 'node:fs'
|
|
18
|
+
import { createInterface } from 'node:readline'
|
|
19
|
+
import { tmpdir } from 'node:os'
|
|
20
|
+
import { dirname, join, resolve } from 'node:path'
|
|
21
|
+
import { fileURLToPath } from 'node:url'
|
|
22
|
+
|
|
23
|
+
const REPO = resolve(dirname(fileURLToPath(import.meta.url)), '..', '..')
|
|
24
|
+
const PORT = 3461
|
|
25
|
+
const KEEP = process.argv.includes('--keep')
|
|
26
|
+
const HOME = mkdtempSync(join(tmpdir(), 'aw-mcp-live-'))
|
|
27
|
+
const BASE = `http://127.0.0.1:${PORT}`
|
|
28
|
+
const MCP_SCRIPT = join(REPO, 'mcp', 'aw-mcp-server.mjs')
|
|
29
|
+
|
|
30
|
+
// 预置系统设置:mcp.enabled=true(等价于用户在「系统设置 → MCP 集成」打开开关)
|
|
31
|
+
writeFileSync(join(HOME, 'runtime-settings.json'), JSON.stringify({ version: 1, overrides: { 'mcp.enabled': true } }))
|
|
32
|
+
|
|
33
|
+
let pass = 0
|
|
34
|
+
const fails = []
|
|
35
|
+
const ok = (name, cond, detail = '') => {
|
|
36
|
+
if (cond) { pass++; console.log(` ✔ ${name}`) }
|
|
37
|
+
else { fails.push(name); console.log(` ✖ ${name}${detail ? ` — ${detail}` : ''}`) }
|
|
38
|
+
}
|
|
39
|
+
const sleep = ms => new Promise(r => setTimeout(r, ms))
|
|
40
|
+
|
|
41
|
+
async function health() {
|
|
42
|
+
try {
|
|
43
|
+
const r = await fetch(`${BASE}/api/health`, { signal: AbortSignal.timeout(3000) })
|
|
44
|
+
return (await r.json())?.data?.status === 'ok'
|
|
45
|
+
}
|
|
46
|
+
catch { return false }
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// ── S0:起隔离实例(真分离,健康门 60s)─────────────────────
|
|
50
|
+
console.log(`[S0] 启动隔离实例(port=${PORT}, home=${HOME})`)
|
|
51
|
+
{
|
|
52
|
+
const out = openSync(join(HOME, 'instance.log'), 'a')
|
|
53
|
+
const child = spawn(process.execPath, [join(REPO, 'bin', 'aw.mjs'), 'start', '--port', String(PORT)], {
|
|
54
|
+
cwd: REPO,
|
|
55
|
+
env: {
|
|
56
|
+
...process.env,
|
|
57
|
+
NO_PROXY: '127.0.0.1,localhost',
|
|
58
|
+
HTTP_PROXY: '',
|
|
59
|
+
HTTPS_PROXY: '',
|
|
60
|
+
AW_MODE: 'home',
|
|
61
|
+
AW_HOME: HOME,
|
|
62
|
+
NUXT_SESSION_PASSWORD: 'aw-mcp-live-e2e-session-password-0123456789',
|
|
63
|
+
},
|
|
64
|
+
detached: true,
|
|
65
|
+
windowsHide: true,
|
|
66
|
+
stdio: ['ignore', out, out],
|
|
67
|
+
})
|
|
68
|
+
closeSync(out)
|
|
69
|
+
child.unref()
|
|
70
|
+
}
|
|
71
|
+
let up = false
|
|
72
|
+
for (let i = 0; i < 30; i++) {
|
|
73
|
+
await sleep(2000)
|
|
74
|
+
if (await health()) { up = true; break }
|
|
75
|
+
}
|
|
76
|
+
ok('实例健康门通过', up, `看日志 ${join(HOME, 'instance.log')}`)
|
|
77
|
+
if (!up) {
|
|
78
|
+
console.log(FAIL_SUMMARY())
|
|
79
|
+
process.exit(1)
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// ── S1:注册 admin(隔离实例首注册即 admin)──────────────────
|
|
83
|
+
console.log('[S1] 注册管理员')
|
|
84
|
+
{
|
|
85
|
+
const r = await fetch(`${BASE}/api/users/register`, {
|
|
86
|
+
method: 'POST',
|
|
87
|
+
headers: { 'content-type': 'application/json' },
|
|
88
|
+
body: JSON.stringify({ name: 'mcp-e2e-admin', email: 'mcp-e2e@awshop.local', password: 'mcp-e2e-passw0rd' }),
|
|
89
|
+
})
|
|
90
|
+
const j = await r.json().catch(() => null)
|
|
91
|
+
ok('admin 注册成功', r.ok && j?.data?.token, `HTTP ${r.status} ${JSON.stringify(j?.message ?? '')}`)
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// ── S2:拉起 stdio MCP 子进程(零端口提示:不给 AW_BASE_URL/AW_PORT)──
|
|
95
|
+
console.log('[S2] 拉起 MCP stdio 子进程(无任何端口提示,靠锁文件自发现)')
|
|
96
|
+
const mcp = spawn(process.execPath, [MCP_SCRIPT], {
|
|
97
|
+
cwd: REPO,
|
|
98
|
+
env: {
|
|
99
|
+
...process.env,
|
|
100
|
+
NO_PROXY: '127.0.0.1,localhost',
|
|
101
|
+
HTTP_PROXY: '',
|
|
102
|
+
HTTPS_PROXY: '',
|
|
103
|
+
AW_MODE: 'home',
|
|
104
|
+
AW_HOME: HOME, // 只给配置根 —— 端口发现完全交给锁文件
|
|
105
|
+
AW_EMAIL: 'mcp-e2e@awshop.local',
|
|
106
|
+
AW_PASSWORD: 'mcp-e2e-passw0rd',
|
|
107
|
+
// 刻意不给:AW_BASE_URL / AW_PORT / AW_TOKEN
|
|
108
|
+
},
|
|
109
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
110
|
+
})
|
|
111
|
+
const rl = createInterface({ input: mcp.stdout })
|
|
112
|
+
const pending = new Map()
|
|
113
|
+
let nextId = 1
|
|
114
|
+
rl.on('line', (line) => {
|
|
115
|
+
try {
|
|
116
|
+
const msg = JSON.parse(line)
|
|
117
|
+
if (msg?.id != null && pending.has(msg.id)) {
|
|
118
|
+
pending.get(msg.id)(msg)
|
|
119
|
+
pending.delete(msg.id)
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
catch { /* 忽略非 JSON 行 */ }
|
|
123
|
+
})
|
|
124
|
+
mcp.stderr.on('data', () => {})
|
|
125
|
+
function rpc(method, params, timeoutMs = 60_000) {
|
|
126
|
+
const id = nextId++
|
|
127
|
+
return new Promise((resolveRpc, rejectRpc) => {
|
|
128
|
+
const timer = setTimeout(() => {
|
|
129
|
+
pending.delete(id)
|
|
130
|
+
rejectRpc(new Error(`rpc 超时: ${method}`))
|
|
131
|
+
}, timeoutMs)
|
|
132
|
+
pending.set(id, (msg) => {
|
|
133
|
+
clearTimeout(timer)
|
|
134
|
+
resolveRpc(msg)
|
|
135
|
+
})
|
|
136
|
+
mcp.stdin.write(`${JSON.stringify({ jsonrpc: '2.0', id, method, params })}\n`)
|
|
137
|
+
})
|
|
138
|
+
}
|
|
139
|
+
const call = async (name, args = {}, timeoutMs) => {
|
|
140
|
+
const res = await rpc('tools/call', { name, arguments: args }, timeoutMs)
|
|
141
|
+
const text = res?.result?.content?.[0]?.text ?? ''
|
|
142
|
+
return { isError: Boolean(res?.result?.isError), text, data: (() => { try { return JSON.parse(text) } catch { return null } })() }
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
// ── S3:协议面 ────────────────────────────────────────────
|
|
146
|
+
console.log('[S3] 协议面')
|
|
147
|
+
{
|
|
148
|
+
const init = await rpc('initialize', { protocolVersion: '2025-03-26' })
|
|
149
|
+
ok('initialize 握手', init?.result?.serverInfo?.name === 'aw-industrial-mcp', JSON.stringify(init?.result?.serverInfo ?? init?.error))
|
|
150
|
+
const list = await rpc('tools/list')
|
|
151
|
+
const tools = list?.result?.tools ?? []
|
|
152
|
+
ok('tools/list ≥30 个工具', tools.length >= 30, `实际 ${tools.length}`)
|
|
153
|
+
const names = new Set(tools.map(t => t.name))
|
|
154
|
+
for (const t of ['aw_status', 'aw_login', 'aw_line_create', 'aw_dcw_create', 'aw_param_write', 'aw_recipe_create', 'aw_line_start', 'aw_daq_controller', 'aw_channel_template_instantiate', 'aw_twin_profile_patch', 'aw_team_provision', 'aw_plugin_list', 'aw_request']) {
|
|
155
|
+
ok(`关键工具存在: ${t}`, names.has(t))
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// ── S4:自动端口发现 + 鉴权 ────────────────────────────────
|
|
160
|
+
console.log('[S4] 自动端口发现 + 懒登录')
|
|
161
|
+
{
|
|
162
|
+
const st = await call('aw_status')
|
|
163
|
+
ok('aw_status 自动发现端口', !st.isError && st.data?.port === PORT, `text=${st.text.slice(0, 200)}`)
|
|
164
|
+
ok('发现来源为锁文件', /lock/i.test(st.data?.discoveredVia ?? ''), st.data?.discoveredVia)
|
|
165
|
+
ok('needsSetup=false(已有 admin)', st.data?.needsSetup === false)
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// ── S5:全链业务(真实 REST)────────────────────────────────
|
|
169
|
+
console.log('[S5] 全链业务:建线→建节点→参数映射→配方→开跑→回环')
|
|
170
|
+
let lineId, productId, dcwNodeId, daqNodeId
|
|
171
|
+
{
|
|
172
|
+
const line = await call('aw_line_create', { name: `MCP-E2E线-${Date.now() % 100000}` })
|
|
173
|
+
ok('aw_line_create', !line.isError && line.data?.line?.id, line.text.slice(0, 150))
|
|
174
|
+
lineId = line.data?.line?.id
|
|
175
|
+
|
|
176
|
+
const product = await call('aw_product_create', { lineId, name: 'E2E 产品' })
|
|
177
|
+
ok('aw_product_create', !product.isError && product.data?.product?.id, product.text.slice(0, 150))
|
|
178
|
+
productId = product.data?.product?.id
|
|
179
|
+
|
|
180
|
+
// 回路驱动节点:driverConfig 指向模拟器没有 —— 用 http 回路不行(要真实回读),
|
|
181
|
+
// 这里用 mock 语义最简单的方式:driver 'modbus-tcp' 指向不存在的设备,
|
|
182
|
+
// 节点可建、参数映射可查;写入会失败,故回环用 read(被动观测,失败也不影响建链验收)。
|
|
183
|
+
// 真实写读回环由 scripts/_dbg-param-map-e2e.ts(自带模拟器)覆盖,本脚本验收 API 集成面。
|
|
184
|
+
const dcw = await call('aw_dcw_create', {
|
|
185
|
+
templateRef: 'dcw-temp-sp',
|
|
186
|
+
name: 'E2E 温度设定',
|
|
187
|
+
lineId,
|
|
188
|
+
driver: 'modbus-tcp',
|
|
189
|
+
driverConfig: { host: '127.0.0.1', port: 15099, unitId: 1, register: 40001, dataType: 'float32', byteOrder: 'big' },
|
|
190
|
+
unit: '℃', min: 150, max: 200, decimals: 1,
|
|
191
|
+
})
|
|
192
|
+
ok('aw_dcw_create(DCW 节点)', !dcw.isError && dcw.data?.node?.id, dcw.text.slice(0, 200))
|
|
193
|
+
dcwNodeId = dcw.data?.node?.id ?? dcw.data?.id
|
|
194
|
+
|
|
195
|
+
const daq = await call('aw_daq_create', {
|
|
196
|
+
templateRef: 'daq-temp-tc',
|
|
197
|
+
name: 'E2E 温度观测',
|
|
198
|
+
lineId,
|
|
199
|
+
driver: 'modbus-tcp',
|
|
200
|
+
driverConfig: { host: '127.0.0.1', port: 15099, unitId: 1, register: 30001, dataType: 'float32', byteOrder: 'big' },
|
|
201
|
+
unit: '℃', min: 0, max: 300,
|
|
202
|
+
semantics: 'E2E 温度观测(验收用)',
|
|
203
|
+
})
|
|
204
|
+
ok('aw_daq_create(DAQ 节点)', !daq.isError && (daq.data?.node?.id ?? daq.data?.id), daq.text.slice(0, 200))
|
|
205
|
+
daqNodeId = daq.data?.node?.id ?? daq.data?.id
|
|
206
|
+
|
|
207
|
+
const params = await call('aw_param_list', { lineId, limits: 1 })
|
|
208
|
+
const plist = params.data?.params ?? params.data ?? []
|
|
209
|
+
const mine = Array.isArray(plist) ? plist.find(p => p.nodeId === dcwNodeId) : null
|
|
210
|
+
ok('参数映射随节点自动生成(ensureForNode)', Boolean(mine), `params=${JSON.stringify(plist).slice(0, 200)}`)
|
|
211
|
+
|
|
212
|
+
const recipe = await call('aw_recipe_create', {
|
|
213
|
+
productId,
|
|
214
|
+
name: 'E2E 配方',
|
|
215
|
+
params: [{ nodeId: dcwNodeId, value: 175, min: 160, max: 190 }],
|
|
216
|
+
daqWindows: [{ nodeId: daqNodeId, min: 0, max: 300 }],
|
|
217
|
+
})
|
|
218
|
+
const recipeId = recipe.data?.recipe?.id ?? recipe.data?.id
|
|
219
|
+
ok('aw_recipe_create(节点级参数绑定)', !recipe.isError && recipeId, recipe.text.slice(0, 200))
|
|
220
|
+
|
|
221
|
+
if (lineId && recipeId) {
|
|
222
|
+
const start = await call('aw_line_start', { lineId, recipeId })
|
|
223
|
+
ok('aw_line_start(逐参数下发回执)', !start.isError, start.text.slice(0, 200))
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
const ctl = await call('aw_daq_controller', { action: 'start' })
|
|
227
|
+
ok('aw_daq_controller start', !ctl.isError, ctl.text.slice(0, 150))
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
// ── S6:优化频道面 ────────────────────────────────────────
|
|
231
|
+
console.log('[S6] 优化频道:创建/模板实例化/孪生 profile')
|
|
232
|
+
{
|
|
233
|
+
const ch = await call('aw_channel_create', { name: `MCP-E2E优化频道-${Date.now() % 100000}`, scenarioPrompt: '验收用:一切决策基于实测数字。' })
|
|
234
|
+
ok('aw_channel_create', !ch.isError && (ch.data?.channelId ?? ch.data?.id), ch.text.slice(0, 150))
|
|
235
|
+
|
|
236
|
+
const tpl = await call('aw_channel_template_list')
|
|
237
|
+
const tlist = tpl.data?.templates ?? tpl.data ?? []
|
|
238
|
+
ok('aw_channel_template_list 含内置 aml-optimization 模板', JSON.stringify(tlist).includes('chtpl-aml-optimization-default'), tpl.text.slice(0, 150))
|
|
239
|
+
|
|
240
|
+
// 模板实例化路径(优化频道的标准创建方式)→ 孪生 profile 应为 aml_optimization + exploration
|
|
241
|
+
const tplId = (Array.isArray(tlist) ? tlist : tlist.templates ?? []).find(t => t.id === 'chtpl-aml-optimization-default')?.id
|
|
242
|
+
?? (Array.isArray(tlist) ? tlist : []).find(t => String(t?.id ?? '').includes('aml-optimization'))?.id
|
|
243
|
+
?? 'chtpl-aml-optimization-default'
|
|
244
|
+
const inst = await call('aw_channel_template_instantiate', { id: tplId, name: `MCP-E2E优化模板实例-${Date.now() % 100000}`, toolProfile: 'aml_optimization', optimizationMode: 'exploration', controlPolicy: 'hitl_governed' })
|
|
245
|
+
const instChId = inst.data?.channelId ?? inst.data?.id
|
|
246
|
+
ok('aw_channel_template_instantiate(aml_optimization)', !inst.isError && instChId, inst.text.slice(0, 200))
|
|
247
|
+
|
|
248
|
+
if (instChId) {
|
|
249
|
+
const prof = await call('aw_twin_profile_get', { channelId: instChId })
|
|
250
|
+
const pj = JSON.stringify(prof.data ?? {})
|
|
251
|
+
ok('aw_twin_profile_get(aml_optimization + exploration 初始态)', !prof.isError && pj.includes('aml_optimization') && pj.includes('exploration'), prof.text.slice(0, 250))
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
// ── S7:插件与守卫 ────────────────────────────────────────
|
|
256
|
+
console.log('[S7] 插件清单与逃生舱守卫')
|
|
257
|
+
{
|
|
258
|
+
const pl = await call('aw_plugin_list')
|
|
259
|
+
ok('aw_plugin_list', !pl.isError && Array.isArray(pl.data?.plugins), pl.text.slice(0, 150))
|
|
260
|
+
|
|
261
|
+
const evil = await call('aw_request', { method: 'GET', path: 'http://evil.example/api/x' })
|
|
262
|
+
ok('aw_request 拒绝非 /api/ 路径', evil.isError)
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
// ── S8:清场 ─────────────────────────────────────────────
|
|
266
|
+
console.log('[S8] 清场')
|
|
267
|
+
mcp.stdin.end()
|
|
268
|
+
mcp.kill()
|
|
269
|
+
{
|
|
270
|
+
const lockPath = join(HOME, '.runtime', 'aw.lock')
|
|
271
|
+
if (existsSync(lockPath)) {
|
|
272
|
+
const pid = Number(readFileSync(lockPath, 'utf8').match(/"pid":\s*(\d+)/)?.[1])
|
|
273
|
+
if (Number.isInteger(pid)) spawnSync('taskkill', ['/PID', String(pid), '/T', '/F'], { stdio: 'ignore' })
|
|
274
|
+
}
|
|
275
|
+
else {
|
|
276
|
+
// 退路:按端口找 pid 的维护交给人工;至少打印提示
|
|
277
|
+
console.log(' · 未找到实例锁,跳过自动清场')
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
await sleep(1500)
|
|
281
|
+
if (!KEEP) {
|
|
282
|
+
try { rmSync(HOME, { recursive: true, force: true }) } catch { /* Windows 句柄延迟,允许残留 */ }
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
console.log('')
|
|
286
|
+
console.log(`═══ aw-mcp live e2e:${pass} PASS / ${fails.length} FAIL ═══`)
|
|
287
|
+
for (const f of fails) console.log(` ✖ ${f}`)
|
|
288
|
+
console.log('')
|
|
289
|
+
process.exit(fails.length ? 1 : 0)
|
|
290
|
+
|
|
291
|
+
function FAIL_SUMMARY() {
|
|
292
|
+
return `═══ aw-mcp live e2e:${pass} PASS / ${fails.length + 1} FAIL ═══`
|
|
293
|
+
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* 审计实验 5 —— 端到端:真实 DcwController + mock 驱动,验证
|
|
3
3
|
* ① 正常写:硬件写入 + 账本锚 + 写历史(正对照)
|
|
4
|
-
* ② PATCH decimals
|
|
4
|
+
* ② PATCH decimals 越界 → 接口层 400 拒绝(0..6 校验已收敛,记账洞保持关闭);
|
|
5
|
+
* 合法 decimals 变更后正常写:硬件/账本/写历史三者一致
|
|
5
6
|
* ③ 不存在节点 id 的语义(服务层 404)
|
|
6
7
|
*
|
|
7
8
|
* cwd 已切到 scripts/_audit/.tmp:所有仓库文件写到临时目录,绝不碰 server/data/*。
|
|
@@ -9,6 +10,10 @@
|
|
|
9
10
|
*/
|
|
10
11
|
import { mkdirSync, rmSync } from 'node:fs'
|
|
11
12
|
|
|
13
|
+
// 审计需在同一节点上连续多次写(stepLimit/60s 间隔/保持窗会挡住秒级连写);
|
|
14
|
+
// 走基准同款旁路(AW_BENCH_MODE=1,仅豁免在线探索限频,四层限界联锁照常生效)。
|
|
15
|
+
process.env.AW_BENCH_MODE = '1'
|
|
16
|
+
|
|
12
17
|
// 清空本次实验的隔离数据目录(run.mjs 已把 AW_DATA_DIR 指向 scripts/_audit/.tmp/audit-data;
|
|
13
18
|
// 同目录其它实验残留的 20000 锚账本会污染断言,故先清空)
|
|
14
19
|
const ISOLATED = new URL('./.tmp/audit-data/', import.meta.url)
|
|
@@ -55,31 +60,33 @@ console.log('\n=== ① 正对照:正常写 ===')
|
|
|
55
60
|
check('节点 value=160', node.value === 160, `value=${node.value}`)
|
|
56
61
|
}
|
|
57
62
|
|
|
58
|
-
console.log('\n=== ② PATCH decimals
|
|
63
|
+
console.log('\n=== ② PATCH decimals 越界被拒;合法变更后三者一致 ===')
|
|
59
64
|
{
|
|
60
|
-
|
|
61
|
-
check('PATCH decimals=101 被接受(无校验)', patched.decimals === 101, `decimals=${patched.decimals}`)
|
|
62
|
-
|
|
63
|
-
const anchorsBefore = ledger.stats().anchors
|
|
64
|
-
const historyBefore = writes.historyList(50).length
|
|
65
|
-
let err: unknown
|
|
65
|
+
let e400: unknown
|
|
66
66
|
try {
|
|
67
|
-
|
|
67
|
+
ctrl.patch(node.id, { decimals: 101 })
|
|
68
68
|
}
|
|
69
69
|
catch (e) {
|
|
70
|
-
|
|
70
|
+
e400 = e
|
|
71
71
|
}
|
|
72
|
-
|
|
73
|
-
check('
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
check('
|
|
77
|
-
|
|
78
|
-
|
|
72
|
+
const status = (e400 as { status?: number })?.status
|
|
73
|
+
check('PATCH decimals=101 被接口拒绝(400,0..6 校验)', status === 400, `status=${status}`)
|
|
74
|
+
|
|
75
|
+
const patched = ctrl.patch(node.id, { decimals: 2 })
|
|
76
|
+
check('合法 PATCH decimals=2 被接受', patched.decimals === 2, `decimals=${patched.decimals}`)
|
|
77
|
+
|
|
78
|
+
const anchorsBefore = ledger.stats().anchors
|
|
79
|
+
const historyBefore = writes.historyList(50).length
|
|
80
|
+
const out = await ctrl.write(node.id, 170, null, { source: 'manual', actor: 'audit' })
|
|
81
|
+
check('写 170 返回 ok', out.ok === true, out.message)
|
|
82
|
+
check('mock PLC 已记录 170(硬件已写)', plcValue() === 170, `plc=${plcValue()}`)
|
|
83
|
+
check('账本新增 1 条锚(可回退)', ledger.stats().anchors === anchorsBefore + 1, `anchors=${ledger.stats().anchors}`)
|
|
84
|
+
check('写历史新增 1 条(审计不缺位)', writes.historyList(50).length === historyBefore + 1, `n=${writes.historyList(50).length}`)
|
|
85
|
+
check('节点 value=170', node.value === 170, `value=${node.value}`)
|
|
79
86
|
|
|
80
87
|
const stable = ledger.lastStableAnchor(node.id)
|
|
81
88
|
console.log(` 账本最新稳定锚={prev:${stable?.prevValue}, new:${stable?.newValue}};硬件实际=${plcValue()};节点显示=${node.value}`)
|
|
82
|
-
check('硬件(170)
|
|
89
|
+
check('硬件(170)= 账本(170)= 节点(170):三者一致', plcValue() === 170 && stable?.newValue === 170 && node.value === 170)
|
|
83
90
|
}
|
|
84
91
|
|
|
85
92
|
console.log('\n=== ③ 不存在节点 id 的服务层语义 ===')
|
|
@@ -148,6 +148,9 @@ console.log('\n=== E. flushNow(全量序列化)成本 ===')
|
|
|
148
148
|
const t = ms(() => { for (let i = 0; i < iters; i++) repo.flushNow() }, iters)
|
|
149
149
|
report(`flushNow(anchors=${CAP_ANCHORS} + records=${CAP_RECORDS} 含聚合)`, t, iters)
|
|
150
150
|
const { statSync } = await import('node:fs')
|
|
151
|
-
const
|
|
151
|
+
const { join } = await import('node:path')
|
|
152
|
+
const { dataDirFor } = await import('../../shared/config/home.mjs')
|
|
153
|
+
// 落盘位置与 repo 同源解析(env AW_DATA_DIR 优先,cwd 兜底),勿再硬编码 cwd 路径
|
|
154
|
+
const size = statSync(join(dataDirFor(), 'dcw-rollback.json')).size
|
|
152
155
|
console.log(` 落盘文件大小=${(size / 1024 / 1024).toFixed(2)} MB(每次 agent/rollback 写后同步全量重写)`)
|
|
153
156
|
}
|