agentworkshop 0.7.71 → 0.8.1
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 +455 -0
- package/.output/.AgentWorkShop/prompts/host-tools.json +455 -0
- package/.output/nitro.json +1 -1
- package/.output/public/_nuxt/{DJJDigim2.js → -FhgRqJl2.js} +1 -1
- package/.output/public/_nuxt/{CGk_VUhO2.js → 0qvcO_KM2.js} +1 -1
- package/.output/public/_nuxt/26OL4Ao82.js +1 -0
- package/.output/public/_nuxt/{sBDZymdy2.js → 2Kwo_j9G2.js} +1 -1
- package/.output/public/_nuxt/{BqYVLAcm.js → 2v5GdspM.js} +1 -1
- package/.output/public/_nuxt/{DkQBMVTs2.js → 8M7wFbEN2.js} +1 -1
- package/.output/public/_nuxt/{DtiY69xi2.js → 8SZLbrI42.js} +1 -1
- package/.output/public/_nuxt/{DF32f5EL2.js → B2NbzUau2.js} +1 -1
- package/.output/public/_nuxt/{CwZW1ZCe2.js → B4JlRHBB2.js} +1 -1
- package/.output/public/_nuxt/{BQOn0q6Y.js → B6C4WofF.js} +1 -1
- package/.output/public/_nuxt/{BC7W6lNm.js → B6UwtJ1a.js} +1 -1
- package/.output/public/_nuxt/{BfQ-ptH0.js → B8HFUsMH.js} +1 -1
- package/.output/public/_nuxt/{DzBbYWrw2.js → BBB_j2LU2.js} +1 -1
- package/.output/public/_nuxt/BCLUwdP52.js +1 -0
- package/.output/public/_nuxt/{CLxmY3Rh.js → BK4wbfGS.js} +1 -1
- package/.output/public/_nuxt/{BRMVDfPl2.js → BKidykmV2.js} +1 -1
- package/.output/public/_nuxt/BPUQZ9Lq2.js +8 -0
- package/.output/public/_nuxt/BRYBzVMJ.js +1 -0
- package/.output/public/_nuxt/{Bj5sjA5O.js → BRci9D_l.js} +1 -1
- package/.output/public/_nuxt/{Dmgqz2np2.js → BVGzwAxr2.js} +1 -1
- package/.output/public/_nuxt/BVg2R2VB2.js +1 -0
- package/.output/public/_nuxt/{C3aUN4Vp2.js → BW2uTUx52.js} +1 -1
- package/.output/public/_nuxt/{B5FKaMM02.js → BY3Lbz3h2.js} +1 -1
- package/.output/public/_nuxt/{DIwmMa_7.js → BYzim_Bn.js} +1 -1
- package/.output/public/_nuxt/{D8xUsQGt.js → B_Obcbiu.js} +1 -1
- package/.output/public/_nuxt/BaYDgyaR.js +3 -0
- package/.output/public/_nuxt/{DZJ11BTI.js → BbACaREb.js} +1 -1
- package/.output/public/_nuxt/{BJrj5JVe2.js → BcosvNXb2.js} +1 -1
- package/.output/public/_nuxt/{B_-vAvzb.js → BfeXib9G.js} +1 -1
- package/.output/public/_nuxt/{CeLqojCJ.js → BfgTar9L.js} +1 -1
- package/.output/public/_nuxt/BfvuWqSa.js +1 -0
- package/.output/public/_nuxt/{D8r8PNQa2.js → BiZWwdcD2.js} +1 -1
- package/.output/public/_nuxt/BkEokGX5.js +1 -0
- package/.output/public/_nuxt/{CJSohaqk2.js → BklGqEto2.js} +2 -2
- package/.output/public/_nuxt/{DkpmSnHX.js → Bko5adbu.js} +1 -1
- package/.output/public/_nuxt/{DTQTGA6v2.js → BmBlIIJo2.js} +1 -1
- package/.output/public/_nuxt/{D_NjL-Hz.js → Bmvt9ydE.js} +1 -1
- package/.output/public/_nuxt/{Cp4r6Eiz.js → BoyuIoSm.js} +1 -1
- package/.output/public/_nuxt/{62J4vljm2.js → Bq-tmkst.js} +1 -1
- package/.output/public/_nuxt/{BMMoqi94.js → BqFaZ4kS.js} +1 -1
- package/.output/public/_nuxt/BsJYieAL2.js +1 -0
- package/.output/public/_nuxt/{DD4J2Otc.js → BtZKe9ZV.js} +1 -1
- package/.output/public/_nuxt/{BnpY_zNx.js → BtumQhZK.js} +1 -1
- package/.output/public/_nuxt/{BjLzqWJH2.js → BwWs9EdO2.js} +1 -1
- package/.output/public/_nuxt/{Bx2a9cuY2.js → BxxpJxZf2.js} +1 -1
- package/.output/public/_nuxt/{qRXa-PM22.js → ByTnUqFw2.js} +1 -1
- package/.output/public/_nuxt/{DvOETuoT2.js → Byiiiwc72.js} +1 -1
- package/.output/public/_nuxt/{Car2lkbb.js → C1-SuwUN.js} +1 -1
- package/.output/public/_nuxt/{Dg81dOEO.js → C14pM5G4.js} +1 -1
- package/.output/public/_nuxt/{MDhaRQq_.js → C2Yp-B8m.js} +1 -1
- package/.output/public/_nuxt/{BJ2nJNlK2.js → C4e6_nom2.js} +1 -1
- package/.output/public/_nuxt/{CiCEprsp2.js → C5OStZJ62.js} +1 -1
- package/.output/public/_nuxt/{ByMj6e7s.js → C6lssmvl.js} +2 -2
- package/.output/public/_nuxt/{C6uBP0Xa.js → CC-GEjfN.js} +1 -1
- package/.output/public/_nuxt/CC2Pv8VL2.js +1 -0
- package/.output/public/_nuxt/{DKiqdYnj.js → CCcMgxV9.js} +1 -1
- package/.output/public/_nuxt/{5S26I34j2.js → CDL30A2z2.js} +1 -1
- package/.output/public/_nuxt/{B8C-QJB5.js → CDYLasP8.js} +1 -1
- package/.output/public/_nuxt/CElzwyXQ.js +1 -0
- package/.output/public/_nuxt/{2KE8xGVm.js → CEvJu-xI.js} +1 -1
- package/.output/public/_nuxt/{CR612R752.js → CFQRFctQ2.js} +1 -1
- package/.output/public/_nuxt/{DnzjxC0u.js → CHk9XxNi.js} +2 -2
- package/.output/public/_nuxt/{Bx4MR0jd.js → CLFmtXU7.js} +1 -1
- package/.output/public/_nuxt/{DW8k_0dQ.js → CMJi6yYS.js} +1 -1
- package/.output/public/_nuxt/{DD-r0S1p.js → CPvFGbr8.js} +1 -1
- package/.output/public/_nuxt/{CCgbgkid.js → CQSxS_Ek.js} +2 -2
- package/.output/public/_nuxt/{jGxHnjW6.js → CQuo31jF.js} +1 -1
- package/.output/public/_nuxt/{SoO2K-di.js → CRCrWy-6.js} +1 -1
- package/.output/public/_nuxt/CUCFFL9m.js +84 -0
- package/.output/public/_nuxt/CZYNy60j2.js +1 -0
- package/.output/public/_nuxt/{WPwdj9pg.js → CZsFf7ck.js} +1 -1
- package/.output/public/_nuxt/CfFUK6932.js +2 -0
- package/.output/public/_nuxt/{DAsjfdZD.js → CfIbFnJz.js} +1 -1
- package/.output/public/_nuxt/{Tk6TQZjU.js → CjF4QY9h.js} +1 -1
- package/.output/public/_nuxt/{DlUQa0wn.js → Cjo1t2IF.js} +1 -1
- package/.output/public/_nuxt/{CDn0eDn8.js → CmuGMxDP.js} +1 -1
- package/.output/public/_nuxt/Cn6EojFe.js +1 -0
- package/.output/public/_nuxt/{DLqSQbGv.js → CnYazk8d.js} +1 -1
- package/.output/public/_nuxt/{DQfy6R_2.js → CnrGVJIr.js} +1 -1
- package/.output/public/_nuxt/{C0YL0HKK.js → CtcBhkci.js} +1 -1
- package/.output/public/_nuxt/{h5gsh8E92.js → Cv-Mv7_h2.js} +1 -1
- package/.output/public/_nuxt/{vPcnBJsa2.js → CzlZrfq82.js} +1 -1
- package/.output/public/_nuxt/{C2YYOgMe.js → CznnUTZx.js} +2 -2
- package/.output/public/_nuxt/{csitHKnE2.js → D-80EfyA2.js} +1 -1
- package/.output/public/_nuxt/{BRdoISnJ2.js → D1C6qtS12.js} +1 -1
- package/.output/public/_nuxt/{Cnrmlixo.js → D1MkndMZ.js} +2 -2
- package/.output/public/_nuxt/{BLwDhlaa.js → D37gODe0.js} +1 -1
- package/.output/public/_nuxt/{NXY37IO62.js → D6FhDrYe2.js} +1 -1
- package/.output/public/_nuxt/{Btx8wL4-.js → D7TZLu4F.js} +1 -1
- package/.output/public/_nuxt/{qoUdVDnC.js → D7tEwf-o.js} +3 -3
- package/.output/public/_nuxt/D8HQPtm62.js +1 -0
- package/.output/public/_nuxt/D9O4L4jK.js +1 -0
- package/.output/public/_nuxt/{aQ1B7BZa2.js → D9lL3fJM2.js} +2 -2
- package/.output/public/_nuxt/{CT-vTjcG2.js → DC-2eKo62.js} +1 -1
- package/.output/public/_nuxt/DF9ETYJ32.js +1 -0
- package/.output/public/_nuxt/DGGBrc0q2.js +1 -0
- package/.output/public/_nuxt/DGu_fna7.js +1 -0
- package/.output/public/_nuxt/{BupBjt6B.js → DKOvbitt.js} +1 -1
- package/.output/public/_nuxt/{B1PzYsqN.js → DNxudyND.js} +1 -1
- package/.output/public/_nuxt/{BfX6_AjY.js → DOT-XQyi.js} +1 -1
- package/.output/public/_nuxt/{BsTZnkVK.js → DPPC9Teq.js} +1 -1
- package/.output/public/_nuxt/{HxohXQ_r.js → DRskyE7l.js} +1 -1
- package/.output/public/_nuxt/{B-U7E_Mc2.js → DW4ZgInh2.js} +1 -1
- package/.output/public/_nuxt/{BErG4kzc2.js → DWe6BMlp2.js} +1 -1
- package/.output/public/_nuxt/DWy0AjON.js +1 -0
- package/.output/public/_nuxt/{Bc_k6AVA.js → DXgw1dVL.js} +4 -4
- package/.output/public/_nuxt/{C3sWJ8SD2.js → DZsKIzKD2.js} +1 -1
- package/.output/public/_nuxt/D_59BNP1.js +14 -0
- package/.output/public/_nuxt/{BQIO4MkA2.js → D_FZ3KZI2.js} +1 -1
- package/.output/public/_nuxt/{n_Njdwii2.js → D__vJGHF2.js} +1 -1
- package/.output/public/_nuxt/{C9gErLQc2.js → DaizNGUm2.js} +1 -1
- package/.output/public/_nuxt/{C-MY-JQE2.js → DdyE0ylS.js} +1 -1
- package/.output/public/_nuxt/DgrK8UCQ.js +0 -0
- package/.output/public/_nuxt/DhLlTxQh2.js +1 -0
- package/.output/public/_nuxt/DhW7cFOa.js +1 -0
- package/.output/public/_nuxt/{Rt2i6k7C2.js → DhjgWrB62.js} +1 -1
- package/.output/public/_nuxt/{KwT4sN_d.js → DiWcX4gj.js} +1 -1
- package/.output/public/_nuxt/DiloA8vK.js +1 -0
- package/.output/public/_nuxt/{DX-c5laM2.js → DlS-SkQ42.js} +1 -1
- package/.output/public/_nuxt/{D_Zspo1y.js → DmHp9yQ3.js} +1 -1
- package/.output/public/_nuxt/{dq1HKoGD.js → DoL9u6wu.js} +1 -1
- package/.output/public/_nuxt/{CIvMT5Ic.js → DqxBCeDe.js} +1 -1
- package/.output/public/_nuxt/{BnNmkGJS2.js → DrlnrdvY2.js} +3 -3
- package/.output/public/_nuxt/{BAcjVcku2.js → Dt8TL8_X2.js} +1 -1
- package/.output/public/_nuxt/{BtfwbNC0.js → Du7gS8RU.js} +1 -1
- package/.output/public/_nuxt/DuUc4bbY2.js +1 -0
- package/.output/public/_nuxt/{DPUXbTg9.js → DudoisLM.js} +1 -1
- package/.output/public/_nuxt/{Ce5R-ZGf2.js → DwgVlehj2.js} +1 -1
- package/.output/public/_nuxt/Dyxf2xZw.js +1 -0
- package/.output/public/_nuxt/Dz9C2pTa.js +1 -0
- package/.output/public/_nuxt/{BYxG9Hb2.js → EMbqTHfT.js} +1 -1
- package/.output/public/_nuxt/{B1SzppY12.js → FsRVXpyF2.js} +1 -1
- package/.output/public/_nuxt/{0MLy6ogg2.js → GQrEW8nk2.js} +1 -1
- package/.output/public/_nuxt/{Tuz5LcLM.js → IXR1BWP5.js} +1 -1
- package/.output/public/_nuxt/{-jpUnM1I2.js → Iub61dX92.js} +1 -1
- package/.output/public/_nuxt/{CQgOzpvI.js → JegDslce.js} +2 -2
- package/.output/public/_nuxt/{DrF3TWoj.js → KzK37yIr.js} +1 -1
- package/.output/public/_nuxt/{Br3MggOL.js → N-CCmCsX.js} +1 -1
- package/.output/public/_nuxt/{DHhmq7s_.js → NfvZ5Lzv.js} +1 -1
- package/.output/public/_nuxt/{CzX_kaPL.js → POTcePF_.js} +1 -1
- package/.output/public/_nuxt/{D7s96J3r2.js → Q-JpBT032.js} +1 -1
- package/.output/public/_nuxt/{DzwIZ81f2.js → R1g64DNi2.js} +1 -1
- package/.output/public/_nuxt/{JgheoP3e.js → R5Pz7BqB.js} +1 -1
- package/.output/public/_nuxt/{yLyz0-Yz.js → SvjzWbn8.js} +1 -1
- package/.output/public/_nuxt/{Dd7MZc_Q.js → XqXoaoDs.js} +1 -1
- package/.output/public/_nuxt/{B6jtLy6z.js → YAA98rWJ.js} +11 -11
- package/.output/public/_nuxt/{HX4_xnak2.js → YLYSczSq2.js} +1 -1
- package/.output/public/_nuxt/{BBw9ylUY2.js → YNhAoK-R2.js} +1 -1
- package/.output/public/_nuxt/Zkbt8Uk5.js +1 -0
- package/.output/public/_nuxt/aml.PalMp-5n.css +1 -0
- package/.output/public/_nuxt/{C41CcsiD.js → b7UcqLKi.js} +1 -1
- package/.output/public/_nuxt/builds/latest.json +1 -1
- package/.output/public/_nuxt/builds/meta/fa0af8b5-3929-428d-a6de-3b5cc6b8248f.json +1 -0
- package/.output/public/_nuxt/{DVkFSOZi.js → cKj4vSo5.js} +1 -1
- package/.output/public/_nuxt/{r1CpGsFp.js → dHwWyr6b.js} +1 -1
- package/.output/public/_nuxt/{default.BzOcvmSE.css → default.BEXGWZFQ.css} +1 -1
- package/.output/public/_nuxt/{DlcA9Gxl.js → eePbiWEh.js} +1 -1
- package/.output/public/_nuxt/{entry.CL2i0F8o.css → entry.C7koBPom.css} +1 -1
- package/.output/public/_nuxt/{cjRzSvAg2.js → eymRov9Y2.js} +1 -1
- package/.output/public/_nuxt/{B8cViLJT.js → geMze5qw.js} +1 -1
- package/.output/public/_nuxt/{uu1wfdfR2.js → gh-WMxV_2.js} +1 -1
- package/.output/public/_nuxt/{Ce6e1mPk2.js → hCN555XP2.js} +1 -1
- package/.output/public/_nuxt/{rdUE8Khf.js → hZG5MLjK.js} +3 -3
- package/.output/public/_nuxt/{CcX_jP-d.js → hlfahYxK.js} +1 -1
- package/.output/public/_nuxt/{cGSl2GZp2.js → ilJHF1nA2.js} +1 -1
- package/.output/public/_nuxt/{D6ZcgHPz.js → jDuiDtGb.js} +1 -1
- package/.output/public/_nuxt/{DbeNMehP.js → k9b520K-.js} +1 -1
- package/.output/public/_nuxt/ontology.B_3Wn907.css +1 -0
- package/.output/public/_nuxt/optimizer.CLA8I1sy.css +1 -0
- package/.output/public/_nuxt/{DSORcpTJ.js → rDvMijKA.js} +2 -2
- package/.output/public/_nuxt/{CAiHhX8P2.js → rF7mggl72.js} +2 -2
- package/.output/public/_nuxt/ri9UF8rk.js +2 -0
- package/.output/public/_nuxt/{KgnxOsMr.js → toG_qAMH.js} +1 -1
- package/.output/public/_nuxt/{KQZmHR_K.js → u3h4pGpm.js} +2 -2
- package/.output/public/_nuxt/{dJ7gK7C2.js → uomnHjhM.js} +1 -1
- package/.output/public/_nuxt/{BUTg4W_x2.js → v77qozuJ2.js} +1 -1
- package/.output/public/_nuxt/{BcEr7tIB.js → v7cV7hJa.js} +1 -1
- package/.output/public/_nuxt/{D25dVZ822.js → vkQoYNQR2.js} +2 -2
- package/.output/public/_nuxt/{wR_w07322.js → vp3LtnTz2.js} +1 -1
- package/.output/public/_nuxt/{Bnc8HELj2.js → we7-sMSo2.js} +1 -1
- package/.output/public/_nuxt/{kN3ZzR1-.js → wxISMS1i.js} +1 -1
- package/.output/public/_nuxt/{DGrrucbG2.js → zy7efYKR.js} +1 -1
- package/.output/server/chunks/_/access.mjs +1 -1
- package/.output/server/chunks/_/binding-authz.mjs +1 -1
- package/.output/server/chunks/_/catalog-view.mjs +1 -1
- package/.output/server/chunks/_/character-asset.repo.mjs +1 -1
- package/.output/server/chunks/_/chart-repo.mjs +1 -1
- package/.output/server/chunks/_/dashboard-repo.mjs +1 -1
- package/.output/server/chunks/_/data-export.mjs +6 -6
- package/.output/server/chunks/_/data-query.mjs +3 -3
- package/.output/server/chunks/_/eda-run.repo.mjs +2 -2
- package/.output/server/chunks/_/entity.mjs +1 -1
- package/.output/server/chunks/_/features.mjs +5 -5
- package/.output/server/chunks/_/golden.mjs +3 -3
- package/.output/server/chunks/_/host-bindings.mjs +1 -1
- package/.output/server/chunks/_/index.mjs +1 -1
- package/.output/server/chunks/_/mes-console.mjs +1 -1
- package/.output/server/chunks/_/nitro.mjs +7291 -3540
- package/.output/server/chunks/_/nitro.mjs.map +1 -1
- package/.output/server/chunks/_/ocap.mjs +1 -1
- package/.output/server/chunks/_/rest-auth.mjs +1 -1
- package/.output/server/chunks/_/scene-layout.repo.mjs +1 -1
- package/.output/server/chunks/_/spc.mjs +2 -2
- package/.output/server/chunks/build/TownView-BWMDbosY.mjs +1 -1
- package/.output/server/chunks/build/{_wsId_-BNKrrV1H.mjs → _wsId_-BPy-Aj9L.mjs} +3 -3
- package/.output/server/chunks/build/{_wsId_-BNKrrV1H.mjs.map → _wsId_-BPy-Aj9L.mjs.map} +1 -1
- package/.output/server/chunks/build/{agents-8tV9xL97.mjs → agents-CpNLdI8E.mjs} +6 -6
- package/.output/server/chunks/build/{agents-8tV9xL97.mjs.map → agents-CpNLdI8E.mjs.map} +1 -1
- package/.output/server/chunks/build/{aml-BNTEDOsl.mjs → aml-DRAFRcGU.mjs} +15 -12
- package/.output/server/chunks/build/{aml-BNTEDOsl.mjs.map → aml-DRAFRcGU.mjs.map} +1 -1
- package/.output/server/chunks/build/api-BEW_ebY_.mjs +64 -0
- package/.output/server/chunks/build/api-BEW_ebY_.mjs.map +1 -0
- package/.output/server/chunks/build/{channel-templates-Iot9Y3vV.mjs → channel-templates-ByHOQQkO.mjs} +2 -2
- package/.output/server/chunks/build/{channel-templates-Iot9Y3vV.mjs.map → channel-templates-ByHOQQkO.mjs.map} +1 -1
- package/.output/server/chunks/build/daq-CdxcfY_G.mjs +1 -1
- package/.output/server/chunks/build/dcw-BlDQtS4q.mjs +1 -1
- package/.output/server/chunks/build/{default-BeB88U7y.mjs → default-CNWS6NUw.mjs} +17 -11
- package/.output/server/chunks/build/{default-BeB88U7y.mjs.map → default-CNWS6NUw.mjs.map} +1 -1
- package/.output/server/chunks/build/{dropdown-CjwsxU39.mjs → dropdown-BNwTVGde.mjs} +2 -2
- package/.output/server/chunks/build/{dropdown-CjwsxU39.mjs.map → dropdown-BNwTVGde.mjs.map} +1 -1
- package/.output/server/chunks/build/{dropdown-C6YH_kSO.mjs → dropdown-Cd-xPhR6.mjs} +2 -2
- package/.output/server/chunks/build/{dropdown-C6YH_kSO.mjs.map → dropdown-Cd-xPhR6.mjs.map} +1 -1
- package/.output/server/chunks/build/input-number-BNlNDK7H.mjs +1 -1
- package/.output/server/chunks/build/{logs-BTfJQ6vQ.mjs → logs-pRb-TMWa.mjs} +3 -3
- package/.output/server/chunks/build/{logs-BTfJQ6vQ.mjs.map → logs-pRb-TMWa.mjs.map} +1 -1
- package/.output/server/chunks/build/{monitor-DvaR3yo8.mjs → monitor-Cq6hRFeQ.mjs} +6 -6
- package/.output/server/chunks/build/{monitor-DvaR3yo8.mjs.map → monitor-Cq6hRFeQ.mjs.map} +1 -1
- package/.output/server/chunks/build/ontology-DK0Mf0zT.mjs +1406 -0
- package/.output/server/chunks/build/ontology-DK0Mf0zT.mjs.map +1 -0
- package/.output/server/chunks/build/{operations-Cl8nVm9D.mjs → operations-SMQrRAcr.mjs} +3 -3
- package/.output/server/chunks/build/{operations-Cl8nVm9D.mjs.map → operations-SMQrRAcr.mjs.map} +1 -1
- package/.output/server/chunks/build/optimizer-BlWTsM-W.mjs +202 -0
- package/.output/server/chunks/build/optimizer-BlWTsM-W.mjs.map +1 -0
- package/.output/server/chunks/build/{pagination-KaIvHBzi.mjs → pagination-DTAconUo.mjs} +2 -2
- package/.output/server/chunks/build/{pagination-KaIvHBzi.mjs.map → pagination-DTAconUo.mjs.map} +1 -1
- package/.output/server/chunks/build/{permissions-CVTfixZj.mjs → permissions-DgXQZSyx.mjs} +6 -6
- package/.output/server/chunks/build/{permissions-CVTfixZj.mjs.map → permissions-DgXQZSyx.mjs.map} +1 -1
- package/.output/server/chunks/build/{schedules-BLhn2CLn.mjs → schedules-dSnr8url.mjs} +6 -6
- package/.output/server/chunks/build/{schedules-BLhn2CLn.mjs.map → schedules-dSnr8url.mjs.map} +1 -1
- package/.output/server/chunks/build/{select--XFl7CtY.mjs → select-B3Dsb9yq.mjs} +3 -3
- package/.output/server/chunks/build/{select--XFl7CtY.mjs.map → select-B3Dsb9yq.mjs.map} +1 -1
- package/.output/server/chunks/build/{settings-DIf_iYdu.mjs → settings-BrIhnS2Z.mjs} +2 -2
- package/.output/server/chunks/build/{settings-DIf_iYdu.mjs.map → settings-BrIhnS2Z.mjs.map} +1 -1
- package/.output/server/chunks/build/{table-DIu_YCJN.mjs → table-CmVD-cA9.mjs} +4 -4
- package/.output/server/chunks/build/{table-DIu_YCJN.mjs.map → table-CmVD-cA9.mjs.map} +1 -1
- package/.output/server/chunks/build/{teams-B2J6ouRY.mjs → teams-B1d32eHK.mjs} +4 -4
- package/.output/server/chunks/build/{teams-B2J6ouRY.mjs.map → teams-B1d32eHK.mjs.map} +1 -1
- package/.output/server/chunks/build/{tokens-DFQGaN2n.mjs → tokens-GYaGJ35Z.mjs} +6 -6
- package/.output/server/chunks/build/{tokens-DFQGaN2n.mjs.map → tokens-GYaGJ35Z.mjs.map} +1 -1
- package/.output/server/chunks/build/{tools-DWJFnU_t.mjs → tools-s_9U1Djj.mjs} +6 -6
- package/.output/server/chunks/build/{tools-DWJFnU_t.mjs.map → tools-s_9U1Djj.mjs.map} +1 -1
- package/.output/server/chunks/build/types-D6J7slEa.mjs +6 -2
- package/.output/server/chunks/build/useDaqAddNode-D_Rkju0f.mjs +1 -1
- package/.output/server/chunks/build/useDaqDetailNode-DeOsDxK5.mjs +1 -1
- package/.output/server/chunks/build/useDaqDetailParams-Cm9a9r5G.mjs +1 -1
- package/.output/server/chunks/build/useDaqFilters-CctmO03p.mjs +1 -1
- package/.output/server/chunks/build/useDaqStream-B9ZBVQrI.mjs +1 -1
- package/.output/server/chunks/build/useDaqTemplates-CK37sMfi.mjs +1 -1
- package/.output/server/chunks/build/useDcwAddNode-DACVcEHs.mjs +1 -1
- package/.output/server/chunks/build/useDcwStream-Dir5ufAU.mjs +1 -1
- package/.output/server/chunks/build/{users-BWw0VCr9.mjs → users-DjiVC_tS.mjs} +6 -6
- package/.output/server/chunks/build/{users-BWw0VCr9.mjs.map → users-DjiVC_tS.mjs.map} +1 -1
- package/.output/server/chunks/routes/api/mcp/workshop.mjs +1 -1
- package/.output/server/chunks/routes/api/system/backup/run.post.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/agent-tools/approvals/_id/decide.post.mjs +17 -4
- package/.output/server/chunks/routes/api/workshop/agent-tools/approvals/_id/decide.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/grant.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/revoke.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/index.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/index.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/index2.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/invoke.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/list.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/datasets/_id/preview.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/env/recheck.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/env/uv.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/env/venv.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/index.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/index.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/index2.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/index3.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/index3.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/index4.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/index5.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/index6.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/index7.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/cancel.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/logs.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/retry.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/jobs/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/jobs/_id_.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/models/_id/predict.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/models/_id/promote.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/models/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/models/_id_.patch.mjs +8 -2
- package/.output/server/chunks/routes/api/workshop/aml/models/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id/train.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/twin/providers.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/analysis/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/analysis/_id_.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/analysis/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/approvals/_id/decide.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/assets/index.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/assets/index2.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channel-templates/_id/instantiate.post.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/channels/_id/activate.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/chat/index.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index.put.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index2.put.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index3.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index4.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index5.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/line.put.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/members/join.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/terminals.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/tools/reset.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/twin-profile.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/twin-profile.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/index.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels.post.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/daq/_id/bind.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id/bindings.put.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id/frames/content.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id/frames.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id/ingest.post.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/daq/_id/samples.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id/test.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/alarms/_id/ack.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/alarms.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/controller.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/export/_id_.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/index2.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/infra/reconnect.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/infra.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/test-driver.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id/bind.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id/bindings.put.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id/param-ledger.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id/read.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id/test.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id/write.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/controller.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index2.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index2.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index3.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index3.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index4.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index4.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index5.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index5.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index6.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index7.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/journal/node/_nodeId/rollback.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/line/query.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/start.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/stop.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/mes-artifacts/file.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/mes-hook-test.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/mes-test-read.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/judge.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/rollback.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/series.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id_.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id/read.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id/write.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/apply.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/mark-good.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/revert.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/rollback-good.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/versions.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/index.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/close.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/data.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/rollback.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/test-driver.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/device-twins/_id/control.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/device-twins/_id/telemetry.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/device-twins/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/device-twins/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/commonality.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/features/run.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/index3.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/index6.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/index6.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/runs/_id/labels.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/runs.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/vm/predict.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/exp/confirmations/_id/decide.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/exp/index.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/fs/dirs.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/harnesses/_id/providers.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/harnesses.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/hitl/pending.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/hitl/respond.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index.mjs +62 -0
- package/.output/server/chunks/routes/api/workshop/index.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/index.put.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index10.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index11.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index12.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index2.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index3.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index3.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index4.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index5.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index6.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index6.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index7.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index8.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/mes/datasets.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/mes/preview.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/autofix.mjs +52 -0
- package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/autofix.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/compile.mjs +54 -0
- package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/compile.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/evidence.mjs +51 -0
- package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/evidence.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/publish.mjs +67 -0
- package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/publish.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/rules/_ruleId/approval-decision.mjs +49 -0
- package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/rules/_ruleId/approval-decision.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/rules/_ruleId/approval.mjs +35 -0
- package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/rules/_ruleId/approval.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/rules/_ruleId/transition.mjs +49 -0
- package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/rules/_ruleId/transition.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/subgraph.mjs +38 -0
- package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/subgraph.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/validate.mjs +35 -0
- package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/validate.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId_.mjs +70 -0
- package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId_.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/ontology/export/_ontologyId_.mjs +64 -0
- package/.output/server/chunks/routes/api/workshop/ontology/export/_ontologyId_.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/ontology/index.mjs +44 -0
- package/.output/server/chunks/routes/api/workshop/ontology/index.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/ontology/scene.mjs +43 -0
- package/.output/server/chunks/routes/api/workshop/ontology/scene.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/ontology/traces/_ontologyId_.mjs +38 -0
- package/.output/server/chunks/routes/api/workshop/ontology/traces/_ontologyId_.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/ontology/versions/_ontologyId/compare.mjs +40 -0
- package/.output/server/chunks/routes/api/workshop/ontology/versions/_ontologyId/compare.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/ontology/versions/_ontologyId_.mjs +63 -0
- package/.output/server/chunks/routes/api/workshop/ontology/versions/_ontologyId_.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/optimization/capabilities.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/optimization/index.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/optimization/index.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/optimization/index2.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/optimization/profiles/_id/publish.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/optimization/recommendations/_id/crosscheck.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/optimization/recommendations/_id/dispatch.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/optimization/solve.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/plugins/_name/disable.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/plugins/_name/enable.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/process-model/datasets.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/process-model/eligibility.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/process-model/experiments.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/process-model/index.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/process-model/specs/_id/publish.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/process-model/train.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.put.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id/deploy.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id/index.put.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id/index2.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/tools/_name_.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/tools/sync.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/workspaces/_id/channel-templates/_tplId_.post.mjs +2 -2
- package/.output/server/chunks/routes/renderer.mjs +2 -2
- package/.output/server/chunks/virtual/entry.mjs +323 -18
- package/.output/server/chunks/virtual/precomputed.mjs +1 -1
- package/.output/server/package.json +1 -1
- package/README-zh.md +28 -6
- package/README.md +26 -4
- package/app/components/AppSidebar.vue +1 -0
- package/app/components/aml/AmlModelsTable.vue +5 -0
- package/app/components/ontology/OntologyGraph.vue +356 -0
- package/app/pages/aml/styles.css +1 -0
- package/app/pages/ontology/api.ts +18 -0
- package/app/pages/ontology/index.vue +1062 -0
- package/app/pages/ontology/types.ts +164 -0
- package/app/pages/optimizer/index.vue +21 -4
- package/config.yml +1 -1
- package/docs/cli.en.md +2 -2
- package/docs/cli.md +2 -2
- package/docs/plugins.en.md +1 -1
- package/docs/plugins.md +1 -1
- package/docs/sdk.en.md +1 -1
- package/docs/sdk.md +1 -1
- package/i18n/locales/en.ts +84 -0
- package/i18n/locales/zh-CN.ts +84 -0
- package/mcp/aw-mcp-server.mjs +53 -1
- package/package.json +1 -1
- package/scripts/docs-shots.mjs +36 -0
- package/scripts/e2e-direct-rest-simulator-paper.mjs +624 -0
- package/scripts/e2e-idd-results.mjs +177 -0
- package/scripts/e2e-model-loop-live.mjs +785 -0
- package/scripts/e2e-ontology-live.mjs +909 -0
- package/scripts/e2e-ontology.mjs +393 -0
- package/scripts/e2e-pi-simulator-paper.mjs +2316 -0
- package/scripts/e2e-registered-harness-simulator-paper.mjs +1926 -0
- package/scripts/e2e-simulator-optimizer-paper.mjs +264 -0
- package/scripts/fixtures/omp-paper-harness.mjs +163 -0
- package/scripts/ontology-idd-rag-e2e.mjs +449 -0
- package/sdk/context.mjs +6 -0
- package/sdk/index.d.mts +2 -0
- package/server/api/workshop/agent-tools/approvals/[id]/decide.post.ts +16 -0
- package/server/api/workshop/aml/models/[id].patch.ts +36 -30
- package/server/api/workshop/ontology/drafts/[draftId]/autofix.ts +31 -0
- package/server/api/workshop/ontology/drafts/[draftId]/compile.ts +39 -0
- package/server/api/workshop/ontology/drafts/[draftId]/evidence.ts +33 -0
- package/server/api/workshop/ontology/drafts/[draftId]/publish.ts +44 -0
- package/server/api/workshop/ontology/drafts/[draftId]/rules/[ruleId]/approval-decision.ts +28 -0
- package/server/api/workshop/ontology/drafts/[draftId]/rules/[ruleId]/approval.ts +17 -0
- package/server/api/workshop/ontology/drafts/[draftId]/rules/[ruleId]/transition.ts +32 -0
- package/server/api/workshop/ontology/drafts/[draftId]/subgraph.ts +24 -0
- package/server/api/workshop/ontology/drafts/[draftId]/validate.ts +16 -0
- package/server/api/workshop/ontology/drafts/[draftId].ts +52 -0
- package/server/api/workshop/ontology/drafts/index.ts +20 -0
- package/server/api/workshop/ontology/export/[ontologyId].ts +50 -0
- package/server/api/workshop/ontology/index.ts +38 -0
- package/server/api/workshop/ontology/scene.ts +34 -0
- package/server/api/workshop/ontology/traces/[ontologyId].ts +19 -0
- package/server/api/workshop/ontology/versions/[ontologyId]/compare.ts +21 -0
- package/server/api/workshop/ontology/versions/[ontologyId].ts +42 -0
- package/server/plugins-builtin/diag-bridge/client.mjs +390 -239
- package/server/plugins-builtin/diag-bridge/host/helpers.mjs +80 -0
- package/server/plugins-builtin/diag-bridge/host/plugin.mjs +264 -2
- package/server/plugins-builtin/diag-bridge/i18n.json +84 -4
- package/server/services/workshop/agents/adapters/omp-rpc-client/frames.ts +129 -111
- package/server/services/workshop/agents/hitl-decision/dispatcher.ts +15 -0
- package/server/services/workshop/agents/host-tool-bridge/tools/industrial.ts +17 -2
- package/server/services/workshop/agents/industrial/aml-job-tools.ts +602 -569
- package/server/services/workshop/agents/industrial/grant-guard.ts +73 -0
- package/server/services/workshop/agents/industrial/index.ts +38 -32
- package/server/services/workshop/agents/industrial/ontology-tools.ts +380 -0
- package/server/services/workshop/agents/industrial/ops-tools.ts +54 -16
- package/server/services/workshop/agents/industrial/optimizer-tools.ts +81 -0
- package/server/services/workshop/agents/industrial/recipe-gate.ts +19 -6
- package/server/services/workshop/agents/industrial/recipe-propose-tools.ts +1 -1
- package/server/services/workshop/agents/industrial/tool-verify.ts +32 -2
- package/server/services/workshop/agents/omp-agent/supervision-history.ts +38 -0
- package/server/services/workshop/agents/omp-agent/tools-steer.ts +18 -1
- package/server/services/workshop/agents/tool-reference-spec.ts +1 -1
- package/server/services/workshop/aml/aml.repo.ts +16 -0
- package/server/services/workshop/aml/twin/physics-spec.ts +6 -22
- package/server/services/workshop/daq/bus/index.ts +12 -5
- package/server/services/workshop/daq/storage/index.ts +6 -5
- package/server/services/workshop/daq/storage/sqlite.adapter.ts +25 -13
- package/server/services/workshop/db/database/open.ts +97 -95
- package/server/services/workshop/db/database/schema.ts +156 -1
- package/server/services/workshop/ontology/autofix.ts +198 -0
- package/server/services/workshop/ontology/compiler.ts +474 -0
- package/server/services/workshop/ontology/contracts.ts +443 -0
- package/server/services/workshop/ontology/guards.ts +139 -0
- package/server/services/workshop/ontology/index.ts +12 -0
- package/server/services/workshop/ontology/ontology.service.ts +938 -0
- package/server/services/workshop/ontology/repo.ts +449 -0
- package/server/services/workshop/ontology/semantic-binding.service.ts +226 -0
- package/server/services/workshop/ontology/subgraph.core.ts +300 -0
- package/server/services/workshop/ontology/subgraph.service.ts +113 -0
- package/server/services/workshop/ontology/validator.ts +218 -0
- package/server/services/workshop/optimization/binding.repo.ts +7 -0
- package/server/services/workshop/optimization/contracts.ts +16 -0
- package/server/services/workshop/optimization/dispatch.service.ts +16 -0
- package/server/services/workshop/optimization/profile-adopt.service.ts +261 -0
- package/server/services/workshop/optimization/profile.repo.ts +24 -6
- package/server/services/workshop/optimization/python/__pycache__/problems.cpython-312.pyc +0 -0
- package/shared/dimensions.ts +124 -0
- package/.output/public/_nuxt/B3Y5bCrM.js +0 -1
- package/.output/public/_nuxt/B7s2qeyT.js +0 -14
- package/.output/public/_nuxt/B8N8nsad2.js +0 -2
- package/.output/public/_nuxt/BO0BJx3w.js +0 -8
- package/.output/public/_nuxt/BWn-lfCp2.js +0 -1
- package/.output/public/_nuxt/Bcs9zzO62.js +0 -1
- package/.output/public/_nuxt/BwO2Y5FH2.js +0 -1
- package/.output/public/_nuxt/C-LU6xv_.js +0 -1
- package/.output/public/_nuxt/CJ0bjZ6v2.js +0 -1
- package/.output/public/_nuxt/CJ3Vul2u.js +0 -1
- package/.output/public/_nuxt/CNwx04ln.js +0 -84
- package/.output/public/_nuxt/CVCscYzb2.js +0 -1
- package/.output/public/_nuxt/C_A0MCol2.js +0 -1
- package/.output/public/_nuxt/CnP6snIz.js +0 -3
- package/.output/public/_nuxt/D3buuIkE.js +0 -1
- package/.output/public/_nuxt/D4_INWgq.js +0 -1
- package/.output/public/_nuxt/D5kCimyw.js +0 -1
- package/.output/public/_nuxt/DBtXLkyA.js +0 -1
- package/.output/public/_nuxt/DHURbGkn2.js +0 -1
- package/.output/public/_nuxt/DaBzS-iu.js +0 -1
- package/.output/public/_nuxt/DnlhV7Xe.js +0 -1
- package/.output/public/_nuxt/GtI6PUI32.js +0 -1
- package/.output/public/_nuxt/LHIav-Kv.js +0 -1
- package/.output/public/_nuxt/Nw_6OpQZ.js +0 -1
- package/.output/public/_nuxt/RuMLNeQE.js +0 -1
- package/.output/public/_nuxt/Y4sMSPrS.js +0 -1
- package/.output/public/_nuxt/aml.CeLxRzvI.css +0 -1
- package/.output/public/_nuxt/builds/meta/0ae8cb0f-6ce5-4096-9692-9b1fc197b30d.json +0 -1
- package/.output/public/_nuxt/goF_oZHF.js +0 -2
- package/.output/public/_nuxt/optimizer.B8gCbU1b.css +0 -1
- package/.output/public/_nuxt/rJ7To74v2.js +0 -1
- package/.output/server/chunks/build/optimizer-BOtGWEtc.mjs +0 -200
- package/.output/server/chunks/build/optimizer-BOtGWEtc.mjs.map +0 -1
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/* eslint-disable @stylistic/max-statements-per-line */
|
|
3
|
+
/**
|
|
4
|
+
* Current-version cross-scene integration run against an isolated AW home and simulator.
|
|
5
|
+
* The simulator runs from a fresh source copy; existing :4010 and business records are untouched.
|
|
6
|
+
* No truth/optimum endpoint is consumed. Not a benefit benchmark or an autonomous experiment runner.
|
|
7
|
+
*
|
|
8
|
+
* AW_PHYSICAL_CONTEXT=<JSON with base/token/home> node scripts/e2e-simulator-optimizer-paper.mjs
|
|
9
|
+
* Defaults to six 120 s, 1 Hz collection windows when DAQ infrastructure is healthy.
|
|
10
|
+
* Exit: 0 all attempted checks passed, 1 failure, 2 blocked downstream coverage.
|
|
11
|
+
*/
|
|
12
|
+
import { spawn } from 'node:child_process'
|
|
13
|
+
import { cpSync, existsSync, mkdirSync, mkdtempSync, openSync, readFileSync, symlinkSync, writeFileSync } from 'node:fs'
|
|
14
|
+
import { createServer } from 'node:net'
|
|
15
|
+
import { dirname, join, resolve } from 'node:path'
|
|
16
|
+
import { fileURLToPath } from 'node:url'
|
|
17
|
+
|
|
18
|
+
const REPO = resolve(dirname(fileURLToPath(import.meta.url)), '..')
|
|
19
|
+
const contextFile = process.env.AW_PHYSICAL_CONTEXT || join(REPO, '.omc', 'optimizer-full-live-20261023', 'live-context.json')
|
|
20
|
+
const context = JSON.parse(readFileSync(contextFile, 'utf8'))
|
|
21
|
+
const BASE = String(context.base || '')
|
|
22
|
+
const token = String(context.token || '')
|
|
23
|
+
const allowed = new Set(['127.0.0.1', 'localhost', '[::1]'])
|
|
24
|
+
if (!allowed.has(new URL(BASE).hostname) || !token) throw new Error('Only an authenticated loopback test instance is allowed')
|
|
25
|
+
if (!/aw-optimizer-live-e2e|optimizer-physical/i.test(String(context.home || ''))) throw new Error('Expected an explicitly isolated optimizer test home')
|
|
26
|
+
const SIM_PORT = Number(process.env.AW_PHYSICAL_SIM_PORT || 4020)
|
|
27
|
+
const MQTT_PORT = Number(process.env.AW_PHYSICAL_MQTT_PORT || 18840)
|
|
28
|
+
const SIM = `http://127.0.0.1:${SIM_PORT}`
|
|
29
|
+
const TAG = `phy${Date.now().toString(36)}`
|
|
30
|
+
const ROOT = mkdtempSync(join(REPO, '.omc', 'optimizer-physical-'))
|
|
31
|
+
const EVID = join(REPO, 'docs', 'audit', 'evidence', '2026-10-25-current-cross-scene', TAG)
|
|
32
|
+
mkdirSync(EVID, { recursive: true })
|
|
33
|
+
const checks = []
|
|
34
|
+
const scenes = []
|
|
35
|
+
let simulator
|
|
36
|
+
const sleep = ms => new Promise(r => setTimeout(r, ms))
|
|
37
|
+
const record = (id, name, status, detail = '') => {
|
|
38
|
+
checks.push({ id, name, status, detail })
|
|
39
|
+
console.log(`${status.toUpperCase()} [${id}] ${name} ${typeof detail === 'string' ? detail : JSON.stringify(detail)}`)
|
|
40
|
+
}
|
|
41
|
+
const check = (id, name, pass, detail = '') => record(id, name, pass ? 'pass' : 'fail', detail)
|
|
42
|
+
async function api(base, method, path, body, auth = false) {
|
|
43
|
+
if (!allowed.has(new URL(base).hostname) || !path.startsWith('/api/')) throw new Error('Loopback API boundary')
|
|
44
|
+
if (/\/plant\/(truth|optimum)/.test(path)) throw new Error('Truth is unavailable to this harness')
|
|
45
|
+
const response = await fetch(base + path, {
|
|
46
|
+
method, headers: { 'content-type': 'application/json', ...(auth ? { authorization: `Bearer ${token}` } : {}) },
|
|
47
|
+
...(body === undefined ? {} : { body: JSON.stringify(body) }), signal: AbortSignal.timeout(120_000),
|
|
48
|
+
})
|
|
49
|
+
return { status: response.status, ...await response.json().catch(() => ({})) }
|
|
50
|
+
}
|
|
51
|
+
const aw = (method, path, body) => api(BASE, method, path, body, true)
|
|
52
|
+
const sim = (method, path, body) => api(SIM, method, path, body)
|
|
53
|
+
const error = result => ({ status: result.status, code: result?.data?.error?.code || result.code, message: result.message || result.statusMessage })
|
|
54
|
+
const need = (response, key, label) => {
|
|
55
|
+
const value = response?.data?.[key]
|
|
56
|
+
if (response.status !== 200 || !value) throw new Error(`${label}: ${JSON.stringify(error(response))}`)
|
|
57
|
+
return value
|
|
58
|
+
}
|
|
59
|
+
async function assertFree(port) {
|
|
60
|
+
const server = createServer()
|
|
61
|
+
await new Promise((resolvePromise, reject) => { server.once('error', reject); server.listen(port, '127.0.0.1', resolvePromise) })
|
|
62
|
+
await new Promise(resolvePromise => server.close(resolvePromise))
|
|
63
|
+
}
|
|
64
|
+
async function bootSimulator() {
|
|
65
|
+
if (process.env.AW_PHYSICAL_SIM_ROOT) {
|
|
66
|
+
if (!resolve(process.env.AW_PHYSICAL_SIM_ROOT).startsWith(join(REPO, '.omc', 'optimizer-physical-'))) throw new Error('Unexpected simulator runtime root')
|
|
67
|
+
if ((await sim('GET', '/api/nodes')).status !== 200) throw new Error('Prestarted isolated simulator is unavailable')
|
|
68
|
+
return
|
|
69
|
+
}
|
|
70
|
+
await assertFree(SIM_PORT)
|
|
71
|
+
await assertFree(MQTT_PORT)
|
|
72
|
+
const dest = join(ROOT, 'simulator')
|
|
73
|
+
mkdirSync(dest)
|
|
74
|
+
cpSync(join(REPO, 'plc-node-simulator', 'src'), join(dest, 'src'), { recursive: true })
|
|
75
|
+
cpSync(join(REPO, 'plc-node-simulator', 'package.json'), join(dest, 'package.json'))
|
|
76
|
+
const modules = join(REPO, 'plc-node-simulator', 'node_modules')
|
|
77
|
+
if (!existsSync(modules)) throw new Error('Simulator dependencies missing; no automatic installation')
|
|
78
|
+
symlinkSync(modules, join(dest, 'node_modules'), process.platform === 'win32' ? 'junction' : 'dir')
|
|
79
|
+
const log = openSync(join(ROOT, 'simulator.log'), 'a')
|
|
80
|
+
simulator = spawn(process.execPath, [join(REPO, 'node_modules', 'tsx', 'dist', 'cli.mjs'), join(dest, 'src', 'server', 'index.ts')], {
|
|
81
|
+
cwd: dest, env: { ...process.env, SIM_PORT: String(SIM_PORT), MQTT_BROKER_PORT: String(MQTT_PORT), NO_PROXY: '127.0.0.1,localhost' },
|
|
82
|
+
stdio: ['ignore', log, log], windowsHide: true,
|
|
83
|
+
})
|
|
84
|
+
for (let i = 0; i < 80; i++) {
|
|
85
|
+
if (simulator.exitCode !== null) throw new Error(`Simulator exited ${simulator.exitCode}; ${join(ROOT, 'simulator.log')}`)
|
|
86
|
+
try { if ((await sim('GET', '/api/nodes')).status === 200) return }
|
|
87
|
+
catch { /* starting */ }
|
|
88
|
+
await sleep(500)
|
|
89
|
+
}
|
|
90
|
+
throw new Error('Simulator boot timeout')
|
|
91
|
+
}
|
|
92
|
+
async function loadScene(key, label, mvName, cvName, sourceDevice) {
|
|
93
|
+
const blueprint = (await sim('GET', `/api/presets/${key}`)).data
|
|
94
|
+
if (!blueprint?.plantModel) throw new Error(`Missing simulator blueprint ${key}`)
|
|
95
|
+
for (const node of blueprint.nodes) {
|
|
96
|
+
node.config ||= {}
|
|
97
|
+
if (node.config.host) node.config.host = '127.0.0.1'
|
|
98
|
+
if (typeof node.config.port === 'number') { node.config.port += 1000; await assertFree(node.config.port) }
|
|
99
|
+
if (node.protocol === 'mqtt') node.config.brokerUrl = `mqtt://127.0.0.1:${MQTT_PORT}`
|
|
100
|
+
const created = await sim('POST', '/api/nodes', node)
|
|
101
|
+
if (created.status !== 200) throw new Error(`Simulator node ${node.id}: ${JSON.stringify(error(created))}`)
|
|
102
|
+
}
|
|
103
|
+
const plant = { ...blueprint.plantModel, id: label, seed: 42, timeScale: 1, truthExport: false }
|
|
104
|
+
const loaded = await sim('PUT', '/api/plant/config', { plantModel: plant, warm: true, upsert: true })
|
|
105
|
+
check(`${label}.plant`, 'Simulator model loaded at real time scale', loaded.status === 200, { kind: plant.kind || 'castfilm', timeScale: 1 })
|
|
106
|
+
const exported = []
|
|
107
|
+
for (const node of blueprint.nodes) {
|
|
108
|
+
const result = await sim('GET', `/api/nodes/${node.id}/export`)
|
|
109
|
+
for (const item of result?.data?.items || []) exported.push({ ...item, deviceId: node.id })
|
|
110
|
+
}
|
|
111
|
+
const mv = exported.find(item => item.deviceId === sourceDevice && item.signal === mvName)
|
|
112
|
+
const cv = exported.find(item => item.signal === cvName)
|
|
113
|
+
if (!mv || !cv) throw new Error(`${label}: missing MV/CV exports`)
|
|
114
|
+
const line = need(await aw('POST', '/api/workshop/dcw/lines', { name: `${TAG}-${label}`, simulated: true, simSceneId: key }), 'line', 'line')
|
|
115
|
+
const product = need(await aw('POST', '/api/workshop/dcw/products', { name: `${TAG}-${label}`, lineId: line.id }), 'product', 'product')
|
|
116
|
+
const template = need(await aw('POST', '/api/workshop/dcw/templates', { name: `${TAG}-${label}`, unit: mv.unit, min: mv.min, max: mv.max, decimals: mv.decimals || 0 }), 'template', 'template')
|
|
117
|
+
// Process-relevant manipulated/controlled-variable pairs use alternating
|
|
118
|
+
// bounded setpoints. Each step-to-step delta stays within maxStep=30.
|
|
119
|
+
const initial = label === 'film' ? 120 : 730
|
|
120
|
+
const control = need(await aw('POST', '/api/workshop/dcw', { templateRef: template.key, name: `${TAG}-${label}-MV`, driver: mv.driver, driverConfig: mv.driverConfig, lineId: line.id, min: mv.min, max: mv.max, unit: mv.unit, stepLimit: 60, writeLockSeconds: 0, holdIntervalMs: 0, readIntervalMs: 500 }), 'node', 'control')
|
|
121
|
+
const state = { label, key, line, product, control, initial, mv, cv, daq: [], runs: [] }
|
|
122
|
+
scenes.push(state)
|
|
123
|
+
// One exposed scalar for each available protocol; include both training channels.
|
|
124
|
+
const selected = [mv, cv]
|
|
125
|
+
for (const driver of ['modbus-tcp', 'modbus-rtu', 'opcua', 'mqtt', 'http']) {
|
|
126
|
+
if (selected.some(item => item.driver === driver)) continue
|
|
127
|
+
const item = exported.find(item => item.driver === driver && !item.format && !(item.driverConfig?.jsonKey))
|
|
128
|
+
if (item) selected.push(item)
|
|
129
|
+
}
|
|
130
|
+
for (const [i, item] of selected.entries()) {
|
|
131
|
+
const probe = await aw('POST', '/api/workshop/daq/test-driver', { driver: item.driver, driverConfig: item.driverConfig })
|
|
132
|
+
check(`${label}.probe.${i}`, `Platform ${item.driver} driver reads simulator signal ${item.signal}`, probe.status === 200 && probe.data?.test?.ok === true, probe.data?.test || error(probe))
|
|
133
|
+
const node = need(await aw('POST', '/api/workshop/daq', { templateRef: 'daq-temp-tc', name: `${TAG}-${label}-${i}`, driver: item.driver, driverConfig: item.driverConfig, lineId: line.id, min: item.min, max: item.max, unit: item.unit, intervalMs: 500, publishIntervalMs: 0 }), 'node', 'DAQ create')
|
|
134
|
+
state.daq.push({ ...node, export: item })
|
|
135
|
+
}
|
|
136
|
+
const written = await aw('POST', `/api/workshop/dcw/${control.id}/write`, { value: initial + 5 })
|
|
137
|
+
check(`${label}.write`, 'Application DCW writes through simulator protocol endpoint', written.status === 200 && written.data?.outcome?.ok === true, written.data?.outcome || error(written))
|
|
138
|
+
const readback = await aw('POST', '/api/workshop/daq/test-driver', { driver: mv.driver, driverConfig: mv.driverConfig })
|
|
139
|
+
const probeValue = Number(readback.data?.test?.value ?? readback.data?.test?.preview?.value)
|
|
140
|
+
// Dedicated simulator node is the independent exposed readback when test-driver response omits value.
|
|
141
|
+
const simNode = (await sim('GET', '/api/nodes')).data?.find(node => node.id === mv.deviceId)
|
|
142
|
+
const signal = simNode?.signals?.find(item => item.name === mvName)
|
|
143
|
+
const observed = Number(signal?.value ?? signal?.runtime?.value ?? probeValue)
|
|
144
|
+
check(`${label}.readback`, 'Exposed PLC setpoint equals application write', Math.abs(observed - initial - 5) <= 0.01, { expected: initial + 5, observed })
|
|
145
|
+
state.recipe = need(await aw('POST', '/api/workshop/dcw/recipes', { name: `${TAG}-${label}`, productId: product.id, params: [{ nodeId: control.id, templateRef: template.key, value: initial, min: mv.min, max: mv.max, stepLimit: 60 }], daqWindows: state.daq.map(node => ({ nodeId: node.id, min: node.export.min, max: node.export.max })) }), 'recipe', 'recipe')
|
|
146
|
+
return state
|
|
147
|
+
}
|
|
148
|
+
function specOf(scene) {
|
|
149
|
+
return {
|
|
150
|
+
schemaVersion: 2, id: `${TAG}-${scene.label}`, version: 1, lineId: scene.line.id, productId: scene.product.id, recipeId: scene.recipe.id, recipeVersion: scene.recipe.version || 1,
|
|
151
|
+
conditions: [{ id: 'simulator', match: [{ field: 'recipeId', op: 'eq', value: scene.recipe.id }] }],
|
|
152
|
+
variables: [
|
|
153
|
+
{ id: 'mv', nodeId: scene.daq[0].id, controlNodeId: scene.control.id, role: 'mv', field: 'value', unit: scene.mv.unit, scale: 1, offset: 0, delayMs: 0, min: scene.mv.min, max: scene.mv.max, maxStep: 30 },
|
|
154
|
+
{ id: 'cv', nodeId: scene.daq[1].id, role: 'cv', field: 'value', unit: scene.cv.unit, scale: 1, offset: 0, min: scene.cv.min, max: scene.cv.max },
|
|
155
|
+
],
|
|
156
|
+
timing: { beatMs: 1000, historySteps: 8, horizonSteps: 4, fixedDt: true },
|
|
157
|
+
trainer: { ref: 'linear_arx@1', config: { arOrder: 1, inputOrder: 1, ridgeLambda: 1e-4, standardize: true } },
|
|
158
|
+
datasetPolicy: { split: { valRatio: 0.4, testRatio: 0.4, seed: 42 }, cleaning: { hampelK: 0, maxInterpMs: 1000 } },
|
|
159
|
+
gatePolicyRef: 'process-model.gates@1', modelInterface: { id: 'linear_state_space', version: 1, inputSemantics: 'setpoint', mode: 'state_space' },
|
|
160
|
+
effectiveDomain: { mv: { mv: { min: scene.mv.min, max: scene.mv.max, maxStep: 30 } }, cv: { cv: { min: scene.cv.min, max: scene.cv.max } } }, purpose: 'mpc_surrogate',
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
async function startRun(scene) {
|
|
164
|
+
const started = await aw('POST', `/api/workshop/dcw/lines/${scene.line.id}/start`, { recipeId: scene.recipe.id })
|
|
165
|
+
check(`${scene.label}.run.${scene.runs.length}`, 'Real application line start opens a tagged collection window', started.status === 200 && Boolean(started.data?.run?.id), error(started))
|
|
166
|
+
if (started.data?.run?.id) scene.runs.push(started.data.run.id)
|
|
167
|
+
}
|
|
168
|
+
async function trainAndSolve(scene) {
|
|
169
|
+
const spec = specOf(scene)
|
|
170
|
+
const registered = await aw('POST', '/api/workshop/process-model/specs', spec)
|
|
171
|
+
check(`${scene.label}.spec`, 'Scene-specific ProcessModelSpec accepted', registered.status === 200, error(registered))
|
|
172
|
+
await aw('POST', `/api/workshop/process-model/specs/${spec.id}/publish?version=1`)
|
|
173
|
+
const built = await aw('POST', '/api/workshop/process-model/datasets', spec)
|
|
174
|
+
if (built.status !== 200) { record(`${scene.label}.dataset`, 'Simulator-collected dataset/train/solve', 'blocked', error(built)); return }
|
|
175
|
+
check(`${scene.label}.dataset`, 'Dataset built from platform-collected simulator data', built.data?.rowCount >= 1 && built.data?.lineageVerified === 1, built.data)
|
|
176
|
+
const eligible = await aw('POST', '/api/workshop/process-model/eligibility', { specId: spec.id, specVersion: 1, datasetId: built.data.datasetId, scope: 'simulation' })
|
|
177
|
+
const report = eligible.data?.report
|
|
178
|
+
check(`${scene.label}.eligibility`, 'Simulator data eligibility evaluated', eligible.status === 200 && Boolean(report), report || error(eligible))
|
|
179
|
+
const submit = await aw('POST', '/api/workshop/process-model/train', { spec, datasetId: built.data.datasetId, modelName: `${TAG}-${scene.label}` })
|
|
180
|
+
let job = submit.data?.job
|
|
181
|
+
for (let i = 0; job?.id && !['done', 'failed', 'cancelled', 'timeout', 'interrupted'].includes(job.status) && i < 240; i++) {
|
|
182
|
+
await sleep(500)
|
|
183
|
+
job = (await aw('GET', `/api/workshop/aml/jobs/${job.id}`)).data?.job
|
|
184
|
+
}
|
|
185
|
+
if (!job?.modelId || report?.optimizationEligible !== true) { record(`${scene.label}.train`, 'Training, model gates and optimization eligibility', 'blocked', { job, report }); return }
|
|
186
|
+
check(`${scene.label}.train`, 'Simulator-collected data training registers a model', job.status === 'done', { jobId: job.id, modelId: job.modelId })
|
|
187
|
+
const profileId = `${TAG}-${scene.label}-profile`
|
|
188
|
+
const profile = await aw('POST', '/api/workshop/optimization/profiles', { schemaVersion: 1, id: profileId, version: 1, modelRef: { modelId: job.modelId, artifactKind: 'linear_state_space@1', artifactHash: '', modelInterface: 'linear_state_space', stage: 'candidate' }, processSpecRef: `${spec.id}@1`, conditionIds: [], status: 'draft', problemTemplateRef: 'linear_mpc_quadratic@1', solverRef: 'osqp_mpc@1', solverVersion: '1', problemConfig: { linear_mpc_quadratic: { cvWeights: { cv: 1 }, duWeights: { mv: 0.1 }, terminalWeight: 2, targets: { cv: scene.label === 'film' ? 50 : 710 } } } })
|
|
189
|
+
if (profile.status !== 200) { record(`${scene.label}.profile`, 'Simulator-trained Profile creation', 'blocked', error(profile)); return }
|
|
190
|
+
const published = await aw('POST', `/api/workshop/optimization/profiles/${profileId}/publish?version=1`)
|
|
191
|
+
check(`${scene.label}.publish`, 'Simulator-trained Profile publishes', published.status === 200, error(published))
|
|
192
|
+
const channel = (await aw('POST', '/api/workshop/channel-templates/chtpl-aml-optimization-default/instantiate', { name: `${TAG}-${scene.label}` })).data
|
|
193
|
+
const agentId = channel?.leadAgentId || channel?.agents?.find(agent => agent.role === 'lead')?.id
|
|
194
|
+
const workspace = (await aw('POST', '/api/workshop/workspaces', { name: `${TAG}-${scene.label}` })).data
|
|
195
|
+
await aw('POST', `/api/workshop/workspaces/${workspace.id}/channels/${channel.channelId}`)
|
|
196
|
+
const binding = await aw('POST', '/api/workshop/optimization/bindings', { workspaceId: workspace.id, channelId: channel.channelId, agentInstanceId: agentId, profileId, profileVersion: 1, mode: 'recommendation' })
|
|
197
|
+
check(`${scene.label}.binding`, 'Scene-specific Profile binds to its Agent instance', binding.status === 200, error(binding))
|
|
198
|
+
await startRun(scene)
|
|
199
|
+
await sleep(12_000)
|
|
200
|
+
const result = await aw('POST', '/api/workshop/agent-tools/invoke', { agentId, tool: 'optimizer_solve', args: {} })
|
|
201
|
+
let candidate
|
|
202
|
+
try { candidate = JSON.parse(result.data?.result?.text || '{}') }
|
|
203
|
+
catch { /* recorded below */ }
|
|
204
|
+
check(`${scene.label}.solve`, 'Bound agent tool produces a candidate from simulator history', !result.data?.result?.isError && candidate?.status === 'optimal', candidate || result.data || error(result))
|
|
205
|
+
if (candidate?.status === 'optimal') {
|
|
206
|
+
const raw = candidate.firstMove?.mv
|
|
207
|
+
const engineered = candidate.firstMoveEngineering?.mv
|
|
208
|
+
check(`${scene.label}.raw-bounds`, 'Unmodified solver first move satisfies declared simulator domain', Number.isFinite(raw) && raw >= scene.mv.min - 1e-6 && raw <= scene.mv.max + 1e-6, { raw, min: scene.mv.min, max: scene.mv.max })
|
|
209
|
+
check(`${scene.label}.units`, 'Tool exposes engineering and model values consistently for scale=1', Number.isFinite(engineered) && Math.abs(engineered - raw) <= 1e-9, { model: raw, engineering: engineered })
|
|
210
|
+
}
|
|
211
|
+
record(`${scene.label}.dispatch`, 'Production dispatch and benefit benchmark', 'not-run', 'Recommendation only; no automatic dispatch and no claim of 15% benefit/20 paired runs')
|
|
212
|
+
}
|
|
213
|
+
if (process.argv.includes('--simulator-only')) {
|
|
214
|
+
await bootSimulator()
|
|
215
|
+
writeFileSync(join(REPO, '.omc', 'optimizer-full-live-20261023', 'simulator-context.json'), JSON.stringify({ root: ROOT, base: SIM, port: SIM_PORT, mqttPort: MQTT_PORT, pid: simulator.pid }, null, 2))
|
|
216
|
+
console.log(`Isolated simulator ready ${SIM}, root=${ROOT}`)
|
|
217
|
+
await new Promise(() => setInterval(() => {}, 60_000))
|
|
218
|
+
}
|
|
219
|
+
try {
|
|
220
|
+
await bootSimulator()
|
|
221
|
+
await loadScene('cast-film-physics', 'film', 'ScrewSpeedSP', 'thick', 'dev-extruder-opcua')
|
|
222
|
+
await loadScene('anneal-line', 'anneal', '均热区3炉温SP', 'StripTemp', 'anneal-heating-mbtcp')
|
|
223
|
+
const daq = await aw('GET', '/api/workshop/daq')
|
|
224
|
+
check('infra.observed', 'DAQ infrastructure state is explicitly observed', daq.status === 200, { infra: daq.data?.infra, meta: daq.data?.meta })
|
|
225
|
+
const healthy = daq.data?.infra?.degraded === false
|
|
226
|
+
const seconds = Number(process.env.AW_PHYSICAL_COLLECT_SECONDS || (healthy ? 120 : 20))
|
|
227
|
+
const runs = healthy && seconds >= 60 ? Number(process.env.AW_PHYSICAL_RUNS || 6) : 1
|
|
228
|
+
for (let run = 0; run < runs; run++) {
|
|
229
|
+
for (const scene of scenes) await startRun(scene)
|
|
230
|
+
for (let elapsed = 0; elapsed < seconds; elapsed++) {
|
|
231
|
+
if (healthy && elapsed >= 60 && elapsed % 60 === 0) {
|
|
232
|
+
for (const scene of scenes) {
|
|
233
|
+
const value = scene.initial + (run % 2 === 0 ? 15 : -15)
|
|
234
|
+
const changed = await aw('POST', `/api/workshop/dcw/${scene.control.id}/write`, { value })
|
|
235
|
+
check(`${scene.label}.stimulus.${run}.${elapsed}`, 'Governed online parameter step through DCW', changed.status === 200 && changed.data?.outcome?.ok === true, changed.data?.outcome || error(changed))
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
if (elapsed % 30 === 0) console.log(`COLLECT run=${run + 1}/${runs} elapsed=${elapsed}/${seconds}s healthy=${healthy}`)
|
|
239
|
+
await sleep(1000)
|
|
240
|
+
}
|
|
241
|
+
for (const scene of scenes) await aw('POST', `/api/workshop/dcw/lines/${scene.line.id}/stop`)
|
|
242
|
+
}
|
|
243
|
+
for (const scene of scenes) {
|
|
244
|
+
const samples = await aw('GET', `/api/workshop/daq/${scene.daq[1].id}/samples?bucketMs=1000&limit=1000`)
|
|
245
|
+
const points = samples.data?.points || []
|
|
246
|
+
const name = `${scene.label}.collection`
|
|
247
|
+
if (!points.length && !healthy) record(name, 'Simulator samples persisted by platform DAQ', 'blocked', { reason: 'DAQ infrastructure degraded: application disables online acquisition', infra: daq.data?.infra, points: points.length })
|
|
248
|
+
else check(name, 'Simulator samples persisted by platform DAQ', points.length > 5, { points: points.length, tail: points.slice(-2) })
|
|
249
|
+
await trainAndSolve(scene)
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
catch (err) { record('harness', 'Simulator harness execution', 'fail', err instanceof Error ? err.stack : String(err)) }
|
|
253
|
+
finally {
|
|
254
|
+
for (const scene of scenes) {
|
|
255
|
+
await aw('POST', `/api/workshop/dcw/lines/${scene.line.id}/stop`).catch(() => {})
|
|
256
|
+
for (const node of scene.daq) await aw('PATCH', `/api/workshop/daq/${node.id}`, { enabled: false }).catch(() => {})
|
|
257
|
+
await aw('PATCH', `/api/workshop/dcw/${scene.control.id}`, { enabled: false }).catch(() => {})
|
|
258
|
+
}
|
|
259
|
+
simulator?.kill()
|
|
260
|
+
const counts = Object.fromEntries(['pass', 'fail', 'blocked', 'not-run'].map(status => [status, checks.filter(item => item.status === status).length]))
|
|
261
|
+
writeFileSync(join(EVID, 'report.json'), JSON.stringify({ at: new Date().toISOString(), base: BASE, simulator: SIM, simulatorRoot: process.env.AW_PHYSICAL_SIM_ROOT || ROOT, applicationHome: context.home, counts, scope: { businessInstanceTouched: false, originalSimulatorTouched: false, realHardwareTouched: false, truthConsumed: false, benefitBenchmark: false, realAgentLlm: false }, scenes: scenes.map(scene => ({ scene: scene.label, lineId: scene.line.id, recipeId: scene.recipe?.id, runs: scene.runs })), checks }, null, 2))
|
|
262
|
+
console.log(JSON.stringify({ counts, report: join(EVID, 'report.json') }))
|
|
263
|
+
process.exitCode = counts.fail ? 1 : counts.blocked ? 2 : 0
|
|
264
|
+
}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Deterministic OMP-RPC transport fixture for the registered `omp` adapter.
|
|
4
|
+
*
|
|
5
|
+
* This is deliberately not an LLM, planner, or harness decision. It emits the
|
|
6
|
+
* single recipe_trial call supplied by the isolated E2E driver, then records
|
|
7
|
+
* the shared-dispatch result returned by AgentWorkShop over OMP-RPC stdio.
|
|
8
|
+
*/
|
|
9
|
+
import { mkdirSync, writeFileSync } from 'node:fs'
|
|
10
|
+
import { dirname, isAbsolute, relative, resolve, sep } from 'node:path'
|
|
11
|
+
|
|
12
|
+
const args = process.argv.slice(2)
|
|
13
|
+
const valueFor = (name) => {
|
|
14
|
+
const index = args.indexOf(name)
|
|
15
|
+
return index >= 0 ? args[index + 1] : undefined
|
|
16
|
+
}
|
|
17
|
+
const scene = valueFor('--scene')
|
|
18
|
+
const recipeId = valueFor('--recipe-id')
|
|
19
|
+
const nodeId = valueFor('--node-id')
|
|
20
|
+
const value = Number(valueFor('--value'))
|
|
21
|
+
const traceRootArg = valueFor('--trace-root')
|
|
22
|
+
const tracePathArg = valueFor('--trace-path')
|
|
23
|
+
const traceRoot = traceRootArg ? resolve(traceRootArg) : ''
|
|
24
|
+
const tracePath = tracePathArg ? resolve(tracePathArg) : ''
|
|
25
|
+
const relativeTracePath = traceRoot && tracePath ? relative(traceRoot, tracePath) : ''
|
|
26
|
+
const expectedTracePath = traceRoot && ['cast-film', 'annealing'].includes(scene)
|
|
27
|
+
? resolve(traceRoot, `fixture-${scene}.json`)
|
|
28
|
+
: ''
|
|
29
|
+
|
|
30
|
+
if (!['cast-film', 'annealing'].includes(scene)
|
|
31
|
+
|| !recipeId
|
|
32
|
+
|| !nodeId
|
|
33
|
+
|| !Number.isFinite(value)
|
|
34
|
+
|| !traceRoot
|
|
35
|
+
|| !tracePath
|
|
36
|
+
|| isAbsolute(relativeTracePath)
|
|
37
|
+
|| relativeTracePath === '..'
|
|
38
|
+
|| relativeTracePath.startsWith(`..${sep}`)
|
|
39
|
+
|| tracePath !== expectedTracePath) {
|
|
40
|
+
process.stderr.write('fixture arguments incomplete\n')
|
|
41
|
+
process.exit(64)
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const trace = {
|
|
45
|
+
fixture: 'deterministic-local-omp-rpc-transport',
|
|
46
|
+
decisionSource: 'predeclared-test-vector; not an LLM or harness decision',
|
|
47
|
+
scene,
|
|
48
|
+
hostToolCalls: [],
|
|
49
|
+
hostToolResults: [],
|
|
50
|
+
}
|
|
51
|
+
mkdirSync(dirname(resolve(tracePath)), { recursive: true })
|
|
52
|
+
writeFileSync(tracePath, `${JSON.stringify(trace, null, 2)}\n`, 'utf8')
|
|
53
|
+
|
|
54
|
+
let input = ''
|
|
55
|
+
let promptCount = 0
|
|
56
|
+
let callCount = 0
|
|
57
|
+
let awaitingToolResult = null
|
|
58
|
+
|
|
59
|
+
function send(frame) {
|
|
60
|
+
process.stdout.write(`${JSON.stringify(frame)}\n`)
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function persist() {
|
|
64
|
+
writeFileSync(tracePath, `${JSON.stringify(trace, null, 2)}\n`, 'utf8')
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function response(frame, data = {}) {
|
|
68
|
+
send({ type: 'response', id: frame.id, command: frame.type, success: true, data })
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
function onFrame(frame) {
|
|
72
|
+
if (!frame || typeof frame !== 'object' || typeof frame.type !== 'string') return
|
|
73
|
+
|
|
74
|
+
if (frame.type === 'host_tool_result') {
|
|
75
|
+
if (awaitingToolResult && frame.id === awaitingToolResult.id) {
|
|
76
|
+
trace.hostToolResults.push({
|
|
77
|
+
id: frame.id,
|
|
78
|
+
result: frame.result ?? null,
|
|
79
|
+
receivedAt: new Date().toISOString(),
|
|
80
|
+
})
|
|
81
|
+
awaitingToolResult = null
|
|
82
|
+
persist()
|
|
83
|
+
send({ type: 'agent_end', isTerminal: true, messages: [] })
|
|
84
|
+
}
|
|
85
|
+
return
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
if (frame.type === 'prompt') {
|
|
89
|
+
promptCount += 1
|
|
90
|
+
if (promptCount !== 1 || callCount !== 0) {
|
|
91
|
+
trace.protocolError = 'expected exactly one prompt and one host_tool_call per scene'
|
|
92
|
+
persist()
|
|
93
|
+
send({ type: 'agent_end', isTerminal: true, messages: [] })
|
|
94
|
+
return
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
callCount += 1
|
|
98
|
+
const id = `paper-${scene}-${Date.now().toString(36)}`
|
|
99
|
+
const toolCallId = `${id}-tc`
|
|
100
|
+
const toolCall = {
|
|
101
|
+
type: 'host_tool_call',
|
|
102
|
+
id,
|
|
103
|
+
toolCallId,
|
|
104
|
+
toolName: 'recipe_trial',
|
|
105
|
+
arguments: {
|
|
106
|
+
recipe_id: recipeId,
|
|
107
|
+
params: [{ node_id: nodeId, value }],
|
|
108
|
+
hypothesis: `Deterministic simulator integration check for ${scene}; apply one bounded candidate and verify the device ACK/readback.`,
|
|
109
|
+
},
|
|
110
|
+
}
|
|
111
|
+
trace.hostToolCalls.push({
|
|
112
|
+
id,
|
|
113
|
+
toolCallId,
|
|
114
|
+
toolName: toolCall.toolName,
|
|
115
|
+
arguments: toolCall.arguments,
|
|
116
|
+
emittedAt: new Date().toISOString(),
|
|
117
|
+
})
|
|
118
|
+
awaitingToolResult = { id }
|
|
119
|
+
persist()
|
|
120
|
+
send(toolCall)
|
|
121
|
+
return
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
if (frame.type === 'set_host_tools' || frame.type === 'set_auto_compaction' || frame.type === 'get_state') {
|
|
125
|
+
response(frame, frame.type === 'get_state'
|
|
126
|
+
? { sessionId: `paper-fixture-${scene}`, model: { contextWindow: 8192 } }
|
|
127
|
+
: {})
|
|
128
|
+
return
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
if (typeof frame.id === 'string' && frame.type !== 'host_tool_cancel') {
|
|
132
|
+
response(frame, {})
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
process.stdin.setEncoding('utf8')
|
|
137
|
+
process.stdin.on('data', (chunk) => {
|
|
138
|
+
input += chunk
|
|
139
|
+
const lines = input.split('\n')
|
|
140
|
+
input = lines.pop() ?? ''
|
|
141
|
+
for (const line of lines) {
|
|
142
|
+
const text = line.trim()
|
|
143
|
+
if (!text) continue
|
|
144
|
+
try {
|
|
145
|
+
onFrame(JSON.parse(text))
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
trace.protocolError = error instanceof Error ? error.message : String(error)
|
|
149
|
+
persist()
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
})
|
|
153
|
+
process.stdin.on('end', () => {
|
|
154
|
+
trace.stdinClosedAt = new Date().toISOString()
|
|
155
|
+
persist()
|
|
156
|
+
})
|
|
157
|
+
process.on('uncaughtException', (error) => {
|
|
158
|
+
trace.protocolError = error instanceof Error ? error.message : String(error)
|
|
159
|
+
persist()
|
|
160
|
+
process.exitCode = 70
|
|
161
|
+
})
|
|
162
|
+
|
|
163
|
+
send({ type: 'ready' })
|