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
package/README-zh.md
CHANGED
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
|
|
29
29
|
**[English](./README.md)** · **[在线文档](https://kingdol666.github.io/AgentWorkShop)** · **[版本发布](https://github.com/kingdol666/AgentWorkShop/releases)** · **[更新日志](./changelog.md)** · **[插件 API](./docs/plugins.md)** · **[SDK](./docs/sdk.md)**
|
|
30
30
|
|
|
31
|
-
<sub><b>v0.
|
|
31
|
+
<sub><b>v0.8.1</b> · 14 个执行引擎 · 6 种现场协议(5 内置 + 串口插件)+ MES REST 集成(镜像与直连双路径)· 数据分析台账(产线级权限隔离)· 工艺参数优化器(过程模型 → AML → OSQP 求解 → 治理下发)· **本体服务 + AI 先行模型闭环**(本体 · 孪生 · 求解器 · AML 采纳)· 104 个宿主工具 · 126 个运行时设置项 · 双语文档(简体中文 / English)</sub>
|
|
32
32
|
|
|
33
33
|
<br />
|
|
34
34
|
|
|
@@ -176,6 +176,17 @@ AgentWorkShop 起家于**多智能体软件工作坊**——Channel 内的编码
|
|
|
176
176
|
| **生产化硬化(v0.7.58)** | 保写心跳生命周期根治——失败写不占位(心跳不再直发幻影指令值)、驱动/连接/产线变更即清值、停线自动挂起保写;mock 静默兜底封堵(未知协议显式报错,插件卸载不再假成功);帧像素 sha256 完整性指纹 + 对象存储按天 GC(删前 DB 交叉校验防误删);Timescale 按天 chunk + 列存压缩(TSL);堆水位监控 + 崩溃/失联/水位三重自动重生;写保持窗与试验节拍落盘(重启不绕频控);grant 运行时复核并入频道绑线(撤权即失活无死角)。 |
|
|
177
177
|
| **Agent 自查工具** | `line_context`、`ops_log`、`recipe_log`、`recipe_versions`、`dcw_journal`——Agent 清楚自己操控的产线/产品/配方,谁做过什么,每个值怎么变。 |
|
|
178
178
|
|
|
179
|
+
#### 模型闭环 —— AI 先行(本体 · 孪生 · 求解器 · AML,v0.8.0)
|
|
180
|
+
|
|
181
|
+
| 能力 | 为何重要 |
|
|
182
|
+
|---|---|
|
|
183
|
+
| **面向控制的本体服务** | 10 类实体、**8 种封闭关系**(`influences / measures / actuates / hasPart / precedes / observedBy / constrainedBy / basedOn`),标注**三级证据**(`candidate_influence → observed_correlation → validated_control`)与**五态生命周期**(`proposed → reviewed → validated → approved_for_control`,第二人批准台账 + 单管理员审计豁免)。**编译器**产出四类工件——过程模型、ProblemIR 增量、场景契约补丁、控制守卫集——带**只收紧**不变量与逐规则 Rule Trace。运行守卫对状态未知 fail-closed;本体引用与求解器 ProblemIR 哈希**分域**,本体改动不会伪装成求解相关变更(漂移显式 409)。 |
|
|
184
|
+
| **Agent 亲手创建虚拟模型** | 训练面频道上,Agent 用工具走完整创建链:`twin_scene_discover`(从**自己真实绑定**推断场景)→ `twin_scene_compile`(SceneContract 草稿)→ `twin_scene_freeze`(须人 `approved_by` + 确认令牌)→ `twin_physics_spec_draft / validate / compile`(声明式 Provider **候选**,绝不自动注册)→ `twin_snapshot_create`(服务端 `auto_daq` 采数,Agent 自报样本拒收)→ `twin_trial_run`(recommendation-only,`candidateExecuted=false`)。同一份物理骨架交由 AML `hybrid_residual` 训练校准(stage A 拟合 τ/增益)。 |
|
|
185
|
+
| **模型进化 = 受治理的采纳** | 训练新模型(数据集 → 资格报告 → AML 作业 → 模型注册)只是半程。`optimizer_profile_propose` 让 **Agent 提议**把新工件采纳进求解 Profile:校验兼容性(模型 × 求解器矩阵,不兼容 422)并挂 HITL 卡。批准是**单一咽喉**:发布 v(n+1) + **重绑旧版本上的全部绑定**(revision+1,在飞求解 `BINDING_STALE` fail-closed),下一次 `optimizer_solve` 即用新模型;拒绝/超时零写。每轮留 `adopt_propose(agent)` + `adopt(user)` 审计行,旧版本保留可回退。 |
|
|
186
|
+
| **人做修正,不只是点批准** | 管理者直接编辑本体草稿(乐观锁 `rev` + 活体校验),亲自走规则生命周期;版本台账给四段 diff(`entities / relations / rules / bindings`)。Profile 版本、孪生场景谱系(冻结场景 + Provider)、守卫决策在 `/ontology`、`/optimizer`、`/aml` 均可视——与 Agent 同源数据,不经 Agent 转述。 |
|
|
187
|
+
| **可读模型 + 草稿自修复** | 三类模型都有可被 Agent 写入的人读元数据:本体文档/实体/规则描述、AML 模型 `label` + `description`(`aml_model_annotate`)、求解器 Profile `name` + `description`(经采纳携带)。本体草稿支持一键**自动修复**(`ontology_draft_autofix`、`POST /drafts/:id/autofix`):补描述、量纲跟随单位、作用域回填、悬空引用与重复 id 修复、证据不足的硬规则状态回退;部分修复在乐观锁 + 审计下落库,`validated_control` 证据**永不伪造**。 |
|
|
188
|
+
| **IDD × RAG × 本体 组合** | 同一会话内,Agent 可调 `ontology_scene_inspect / ontology_rule_explain`、经插件桥跑 IDD 诊断(CI 用 mock 快速筛查,生产用真实 LLM 意图)、再写 `analysis_save` 台账条目**同时引用**本体规则与诊断 run id——组合全程可审计。RAG `kb_agent` 入库属写类工具,必须过 HITL 审批;平台另提供**读桥**(`/api/plugins/rag-bridge/search`)直连 RAG 两阶段检索。 |
|
|
189
|
+
|
|
179
190
|
#### 治理、配置与扩展
|
|
180
191
|
|
|
181
192
|
| 能力 | 为何重要 |
|
|
@@ -191,7 +202,7 @@ AgentWorkShop 起家于**多智能体软件工作坊**——Channel 内的编码
|
|
|
191
202
|
| **双模式优化闭环** | 专属频道模板把闭环**结构性拆开**:*aml-training* 频道拿建模面(数据集、作业、场景编译、物理 spec、建模任务——无产线写入、无 MPC),*aml-optimization* 频道拿执行面(快照、试验、门禁、MPC、贝叶斯寻优 `twin_bayes_optimize`、受治理微写 `optimization_explore`)——边训边优在结构上不可能。**探索**模式走治理链写入并做响应回读配对(每笔写入落 `optimization_explorations` 台账);**生产**模式要求绑定过门禁的模型(`aml` 模式,实例化时给 `boundModelId`)。 |
|
|
192
203
|
| **运行时可观测** | `GET /api/system/monitor` 把 Agent 团队内部暴露成数字:根队列深度、看门狗介入次数、Harness 会话复用、记忆 outbox 积压——每项都有对应的文档化回退开关,新机制可以不重新部署就关掉。 |
|
|
193
204
|
| **产线操作单页(`/operations`)** | 一页看全对产线的每一次触碰:实时操作流水(REST 快照 + WS 推流)把写控、数采、建模、配方、回退、报警、产线、人工、系统动作归入**九类分类**,写控行渲染结构化 **前值 → 后值 diff 徽章**(失败标红),并直接从事件流推断**闭环阶段**(监视 → 探索·小步 → 推荐搜索 → 影子验证 → 生产)。同一数据面也供工作台控制台的「产线作业」面板使用。 |
|
|
194
|
-
| **外部 MCP 网关** | `aw mcp` 启动零依赖的 **stdio MCP 服务**(
|
|
205
|
+
| **外部 MCP 网关** | `aw mcp` 启动零依赖的 **stdio MCP 服务**(41 个工具),自动发现运行中的实例(环境变量 → 锁文件 → 配置文件),把产线、配方(含 mark-good)、受治理 DCW 写入、工艺参数语义映射、数采查询、频道、团队供给、模型晋升、判卷/回退与插件管理暴露给任意 MCP 客户端——受 `mcp.enabled` 运行时设置门控,附 `--doctor` 与 `--print-config` 辅助指令。此外每个 Channel 成员实例都有**专属的全量工具 stdio 桥**(104 个宿主工具 + 插件工具,按该 Agent 的角色/绑定面编译视图;ETag/304 增量轮询 + `tools/list_changed`),codex / dsh / opencode 等引擎以 MCP 形态拿到与原生注入完全同链的治理(token 自证 → 五层复核)。 |
|
|
195
206
|
| **全量配置驱动运行时** | 全部运行旋钮(记忆预算、上下文压缩、回退护栏、保留策略、备份、日志级别、系统时区、MCP 开关…)在设置描述符注册表声明一次,优先级 **config.yml < runtime-settings < env**——**126 个设置项、19 组**(42 live / 84 restart),代码零硬编码默认。 |
|
|
196
207
|
| **可配置系统时区** | 一个 `time.timeZone` 设置项(IANA 时区,live 热生效)统一驱动人读时间——日志、聊天、审计、Agent 记录与定时任务;机器时间轴(数采样本、`timestamptz`)仍保存绝对时间。 |
|
|
197
208
|
| **可配置节拍** | 采样与查询的默认值/下限全部是 **live 设置**(`daq.sampling.*`、`daq.query.*`):热重载、create/patch 时钳制,Agent 工具描述实时携带当前值。 |
|
|
@@ -394,7 +405,7 @@ aw update --check # 只报告,不安装
|
|
|
394
405
|
npm install -g agentworkshop@latest # 手动等效
|
|
395
406
|
```
|
|
396
407
|
|
|
397
|
-
版本遵循 semver。每次 `aw start` 都会校验配置根,并把 `home` 之前的旧版 `data/` 布局迁移进来(以最新文件为准),因此数据可以跨版本存活。SQLite schema 迁移在服务端启动时执行。当前版本:**v0.
|
|
408
|
+
版本遵循 semver。每次 `aw start` 都会校验配置根,并把 `home` 之前的旧版 `data/` 布局迁移进来(以最新文件为准),因此数据可以跨版本存活。SQLite schema 迁移在服务端启动时执行。当前版本:**v0.8.1**——见[版本发布](https://github.com/kingdol666/AgentWorkShop/releases)。
|
|
398
409
|
|
|
399
410
|
### 第一次「Agent × 产线」会话(约 2 分钟)
|
|
400
411
|
|
|
@@ -443,7 +454,7 @@ aw config set daq.query.minBucketMs 500 # 查询下限(samples/产
|
|
|
443
454
|
| `aw stop` | 依单实例锁终止运行中的 aw 服务实例 |
|
|
444
455
|
| `aw config list · get · set · unset · reset` | 读写运行时设置(schema 校验 + 原子写盘) |
|
|
445
456
|
| `aw plugin list · create · enable · disable` | 跨三种作用域管理插件:查看、脚手架(默认 project 作用域;`--global` 为 user 作用域)、启停(写状态文件,运行中的服务约 1 秒热重载) |
|
|
446
|
-
| `aw mcp` | 工业 MCP stdio 服务(
|
|
457
|
+
| `aw mcp` | 工业 MCP stdio 服务(41 个工具,覆盖平台 REST:产线、配方、DCW 写入、参数映射、数采、频道、团队、模型晋升、插件)——自动发现运行实例;`--doctor` 一次讲清发现/健康/鉴权,`--print-config` 直出可粘贴的 MCP 客户端配置 |
|
|
447
458
|
| `aw home` | 查看/初始化配置根 `.AgentWorkShop` |
|
|
448
459
|
| `aw init <dir>` | 脚手架一个可运行的新项目(含完整配置系统与 CLI) |
|
|
449
460
|
| `aw register <路径\|URL\|npm:包名>` | 注册一条新指令——项目级或 `--global` 用户级 |
|
|
@@ -513,6 +524,17 @@ export async function run(argv, ctx) {
|
|
|
513
524
|
- **双模式优化闭环**:随包附带两个频道模板——`chtpl-aml-training-default`(建模面:22 个工具,无产线写入、无 MPC)与 `chtpl-aml-optimization-default`(执行面:快照/试验/门禁/MPC/贝叶斯寻优,外加 `optimization_explore`——受治理微写,每笔设定值与响应回读配对落 `optimization_explorations` 台账)。两面按频道互斥注入;优化频道实例化时可选**探索**模式(治理小步,无需模型)或 **aml** 模式(必须给 `boundModelId`——过门禁的模型先绑定,执行面才解锁)。
|
|
514
525
|
- **孪生 Provider 插件 SDK(热加载)**:工业场景的物理主干 / 场景包 / 目标 / 求解器经 `ctx.twin` 注册进 **Twin Provider Registry**(`registerPhysicsProvider` / `registerScenePack` / `registerObjectiveProfile` / `registerTrainingAdapter` / `registerSolverAdapter`,另有 `listProviders` / `getProviderHealth` / `resolveProvider` / `validateProvider` / `retireProvider` / `isRegistryAvailable`)。孪生工具按 `SceneContract.physicsProfileId` 解析 Provider(解析不到回退内置 `twin-injection-default`),**换场景不改工具与频道**;热重载按 **generation** 装载新代、排空旧代,试验与 MPC 持租约 ⇒ 在飞工作不被作废,`retireProvider` 等引用归零才下线。系统自带注塑 Provider 走的正是这套外部契约(`server/plugins-builtin/twin-injection-default/`),装法与其它插件同址、停用或热重载无需重启。清单字段与可运行示例见 [`docs/plugins.md`](./docs/plugins.md)「混合孪生 Provider 插件」,SDK 面见 [`docs/sdk.md`](./docs/sdk.md) §4.10。
|
|
515
526
|
|
|
527
|
+
### 本体与 AI 先行模型闭环(v0.8.0)
|
|
528
|
+
|
|
529
|
+
第三层建模资产——让整个闭环**自描述**。
|
|
530
|
+
|
|
531
|
+
- **创作面**:`POST /api/workshop/ontology` 开草稿(乐观锁 `rev`),整份文档(实体/关系/规则/语义绑定)双重校验——schema/量纲 + **对真实 DAQ/DCW/配方对象的活体绑定校验**。规则走五态生命周期(`proposed → reviewed → validated → approved_for_control → deprecated`),控制级批准需要批准单(第二人;单管理员部署有审计留痕的 solo 豁免),`publish` 拒绝未到控制级批准的硬约束。版本不可变——发布即新版本,`GET /versions/{id}/compare` 给四段 diff;`/ontology` 六 tab 渲染图、编译产物、Rule Trace、绑定与版本台账。十件 Agent 工具覆盖同一面(`ontology_scene_inspect / node_neighbors / draft_create / draft_validate / draft_update / rule_explain / compile_preview / publish_propose / version_compare / draft_autofix`),外部 MCP 服务镜像其中四件只读工具。`/ontology` 的图 tab 渲染可交互节点-边视图(自绘 SVG,MV/CV/结构分道),点击节点抽屉可加载直接与 2 跳邻接(草稿维度子图 API)。
|
|
532
|
+
- **编译不变量**:每版本四类产物——过程模型增量(特征候选、τ = D/v 时滞先验、单调性)、ProblemIR 增量、场景契约补丁、控制守卫集;**只收紧不放宽**、PLC 层隔离(联锁编译为 `PLC_LAYER_REQUIRED` 决策而非软件守卫)、不支持形式编译期拒绝(非线性 QP/线性耦合)、**哈希域分离**:`ontologyRefs` 进 Profile 内容哈希但**永不进**求解器 `ProblemIR` 哈希,本体改动表现为 `409 ONTOLOGY_PACK_DRIFTED` 而不是伪造的 IR 变更。
|
|
533
|
+
- **运行时真正生效的只有四处**:下发时的**节点意图守卫**(`evaluateOntologyGuardsForNodes` → `409 ONTOLOGY_GUARD_BLOCKED`,状态未知 fail-closed)、供数据集/训练规划消费的**训练先验派生**、孪生消费的**场景/守卫补丁**、以及 Profile `ontologyRefs` 钉住的**已发布版本谱系校验**(下发时复核)。其余都是可审阅的元数据。
|
|
534
|
+
- **采纳环——模型进化而不只是参数调优**:`optimizer_profile_propose` 打通「训练 → 求解」最后一公里:Agent 复制最新**已发布** Profile、换上新模型工件、生成 v(n+1) 草稿并挂 HITL 卡(`optimizer-profile:<id>@<版本>`)。批准与裁决两入口同路由——批准 ⇒ 发布草稿(冻结哈希)+ **自动重绑基线版本上的全部绑定**(revision+1,在飞求解按 `BINDING_STALE` fail-closed)+ 审计 `optimizer.profile.adopt`;拒绝/超时 ⇒ 零写。兼容性(工件种类 × 求解器族,D21)在提议时校验,Agent 只能在自身绑定面内提议。真机连续两轮进化(v1 → v2 → v3)验证,每轮后 `optimizer_solve` 均在新工件上 optimal。
|
|
535
|
+
- **实测**:531 单测 · 44 服务层本体断言 · **72/72** 本体真机 e2e · **46/46** 模型闭环真机 e2e(孪生创建链 + 两轮采纳 + 零设备写入)· 14 条 MCP 断言。报告:[`docs/audit/2026-10-24-ontology-acceptance.md`](./docs/audit/2026-10-24-ontology-acceptance.md)、[`docs/audit/2026-10-24-ontology-live-report.md`](./docs/audit/2026-10-24-ontology-live-report.md)、[`docs/audit/2026-10-24-model-loop-acceptance.md`](./docs/audit/2026-10-24-model-loop-acceptance.md)。规范:[`docs/plans/2026-10-24-ontology-service-plan.md`](./docs/plans/2026-10-24-ontology-service-plan.md)、[`docs/plans/2026-10-24-closed-loop-acceptance.md`](./docs/plans/2026-10-24-closed-loop-acceptance.md)。
|
|
536
|
+
- **边界(显式)**:ProblemIr 增量已编译但尚未作为求解约束消费;执行结果回写推荐台账的 outcome 回路、逐回合本体 prompt 注入属下一轮;RDF/OWL/SHACL 导出未交付。
|
|
537
|
+
|
|
516
538
|
---
|
|
517
539
|
|
|
518
540
|
## 使用说明
|
|
@@ -653,7 +675,7 @@ AgentWorkShop/
|
|
|
653
675
|
│ ├── mcp/ # MCP 服务(25 个工具,进程内 workshop 面)
|
|
654
676
|
│ ├── plugins-builtin/ # 随包发布的插件(serial-bridge · rag-bridge · diag-bridge · twin-injection-default)
|
|
655
677
|
│ └── plugins/ # 运行时装配(单例)
|
|
656
|
-
├── mcp/ # aw mcp —— 零依赖 stdio MCP 网关(
|
|
678
|
+
├── mcp/ # aw mcp —— 零依赖 stdio MCP 网关(41 个工具,实例自动发现)
|
|
657
679
|
├── sdk/ # agentworkshop/sdk——插件上下文、钩子总线、REST 客户端、浏览器 SDK
|
|
658
680
|
├── tui/ # 终端工作台(aw tui)
|
|
659
681
|
├── shared/
|
|
@@ -870,7 +892,7 @@ Informatics 匿名评审稿,IEEEtran 双栏 10 页)。源文件、编译稿与
|
|
|
870
892
|
| 任意场景混合孪生建模闭环:场景发现 → 编译 → 冻结 → 物理 spec 起草/校验/编译 → 参考训练器作业(物理校准 + 残差集成 + conformal UQ)、模型驱动试验、持续校准 worker | 已交付 |
|
|
871
893
|
| 双模式优化闭环:`aml-training` / `aml-optimization` 专属频道模板、互斥工具面、探索 ↔ 生产双模式、带回读配对的治理微写 | 已交付 |
|
|
872
894
|
| 产线操作流水:`/operations` 单页 + 工作台控制台面板,九类操作时间线、结构化写控 diff、闭环阶段推断 | 已交付 |
|
|
873
|
-
| 外部 MCP 网关:`aw mcp` stdio 服务(
|
|
895
|
+
| 外部 MCP 网关:`aw mcp` stdio 服务(41 个工具)、实例自动发现、`mcp.enabled` 运行时门控 | 已交付 |
|
|
874
896
|
| 可配置系统时区(`time.timeZone`,live 热生效)+ 配方参数级单步限幅 `stepLimit` + 配方 `description` 元字段 | 已交付 |
|
|
875
897
|
| 生产硬化:TLS、MQTT 鉴权、OPC UA 签名+加密缺省、结构化审计日志 | 规划中 |
|
|
876
898
|
| 边缘部署形态:独立 edge-agent + 中心 broker | 规划中 |
|
package/README.md
CHANGED
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
|
|
29
29
|
**[简体中文](./README-zh.md)** · **[Documentation](https://kingdol666.github.io/AgentWorkShop)** · **[Releases](https://github.com/kingdol666/AgentWorkShop/releases)** · **[Changelog](./changelog.md)** · **[Plugin API](./docs/plugins.md)** · **[SDK](./docs/sdk.md)**
|
|
30
30
|
|
|
31
|
-
<sub><b>v0.
|
|
31
|
+
<sub><b>v0.8.1</b> · 14 engines · 6 field protocols (5 built-in + serial plugin) + MES REST integration (mirror & live) · data-analysis ledger with line-scoped permissions · process optimizer (process model → AML → OSQP solver → governed dispatch) · **ontology service + AI-first model loop** (ontology · twin · solver · AML adoption) · 104 host tools · 126 runtime settings · bilingual docs (简体中文 / English)</sub>
|
|
32
32
|
|
|
33
33
|
<br />
|
|
34
34
|
|
|
@@ -177,6 +177,17 @@ Recorded against a running instance: real DAQ history, real write control, real
|
|
|
177
177
|
| **Production hardening (v0.7.58)** | Hold-heartbeat lifecycle fixed — failed writes never occupy the setpoint (no phantom re-dispatch), driver/connection/line changes clear the value, line stop suspends hold automatically; silent mock fallback blocked (unknown protocols fail loudly, plugin unload can't fake success); frame pixel sha256 fingerprints + day-directory object GC (DB cross-check before delete); Timescale daily chunks + columnstore compression (TSL); heap-watermark watch with crash/liveness/watermark auto-respawn; write-hold windows & trial cadence persisted across restarts; runtime grant re-checks include the channel-bound line (revocation takes effect everywhere). |
|
|
178
178
|
| **Agent self-audit tools** | `line_context`, `ops_log`, `recipe_log`, `recipe_versions`, `dcw_journal` — agents see exactly which line/product/recipe they control, who did what, and how every value changed. |
|
|
179
179
|
|
|
180
|
+
#### Model loop — AI-first (ontology · twin · solver · AML, v0.8.1)
|
|
181
|
+
|
|
182
|
+
| Capability | Why it matters |
|
|
183
|
+
|---|---|
|
|
184
|
+
| **Control-oriented ontology service** | Entities (10 kinds) and **eight closed relation kinds** (`influences / measures / actuates / hasPart / precedes / observedBy / constrainedBy / basedOn`) annotated with **three evidence levels** (`candidate_influence → observed_correlation → validated_control`) under a **five-state lifecycle** (`proposed → reviewed → validated → approved_for_control`, second-person approval ledger, solo-operator exemption audited). The **compiler** emits four artifacts — process model, ProblemIR delta, scene-contract patch, control-guard set — under a **tighten-only** invariant, with a row-level Rule Trace per rule. Runtime guards fail closed on unknown state; ontology refs live in a **hash domain separate from the solver's ProblemIR hash**, so ontology edits never masquerade as solver-relevant changes (drift is an explicit 409). |
|
|
185
|
+
| **Agents build the virtual model** | On a training-face channel the agent runs the whole creation chain with tools: `twin_scene_discover` (scene inferred from *its real node bindings*) → `twin_scene_compile` (SceneContract draft) → `twin_scene_freeze` (needs a human `approved_by` + confirmation token) → `twin_physics_spec_draft / validate / compile` (declarative provider **candidate**, never auto-registered) → `twin_snapshot_create` (server-side `auto_daq` sampling; agent-supplied samples rejected) → `twin_trial_run` (recommendation-only, `candidateExecuted=false`). The same generated physics skeleton feeds AML `hybrid_residual` calibration (τ/gain fitted in stage A). |
|
|
186
|
+
| **Model evolution is governed adoption** | Training a new model (dataset → eligibility report → AML job → registry) is only half the loop. `optimizer_profile_propose` lets the **agent propose adopting** that artifact into the solver profile: it validates compatibility (model × solver matrix, 422 on mismatch) and opens a HITL card. Approval is the **single throat** that publishes profile v(n+1) and **rebinds every agent** on the old version (revision+1; in-flight solves fail closed with `BINDING_STALE`), so the next `optimizer_solve` runs on the new model. Reject/timeout = zero writes. Every round leaves `adopt_propose(agent)` + `adopt(user)` audit rows; old versions remain for rollback. |
|
|
187
|
+
| **Humans correct, not just approve** | Managers edit the ontology draft directly (optimistic-lock `rev`, live schema + binding validation) and walk the rule lifecycle themselves; the version ledger shows a four-part diff (`entities / relations / rules / bindings`). Profile versions, twin scene lineage (frozen scene + provider) and guard decisions are visible on `/ontology`, `/optimizer` and `/aml` — the same data the agent sees, without agent mediation. |
|
|
188
|
+
| **Readable models & self-repairing drafts** | All three model kinds carry human-readable metadata the agent can write: ontology document/entity/rule descriptions, AML model `label` + `description` (`aml_model_annotate`), and solver-profile `name` + `description` (carried through adoption). Ontology drafts get a one-click **auto-fix** (`ontology_draft_autofix`, `POST /drafts/:id/autofix`): descriptions, unit-following dimensions, scope backfill, dangling-reference and duplicate-id repair, and a hard-rule status downgrade when evidence is insufficient — partial fixes persist under optimistic lock + audit, and `validated_control` evidence is **never fabricated**. |
|
|
189
|
+
| **IDD × RAG × ontology composition** | In one session an agent can call `ontology_scene_inspect` / `ontology_rule_explain`, run IDD diagnosis through the plugin bridge (mock quick-screen in CI, real LLM intents in production), and write an `analysis_save` ledger entry citing **both** the ontology rule and the diagnosis run id — the composition is auditable end-to-end. RAG `kb_agent` ingestion sits behind a HITL approval (write-class tool), while the platform exposes a **read bridge** (`/api/plugins/rag-bridge/search`) into the RAG service's two-stage retrieval. |
|
|
190
|
+
|
|
180
191
|
#### Governance, configuration & extension
|
|
181
192
|
|
|
182
193
|
| Capability | Why it matters |
|
|
@@ -192,7 +203,7 @@ Recorded against a running instance: real DAQ history, real write control, real
|
|
|
192
203
|
| **Two-mode optimization loop** | Dedicated channel templates split the loop **structurally**: an *aml-training* channel gets the modeling face (datasets, jobs, scene compile, physics specs, training plans — no plant writes, no MPC) and an *aml-optimization* channel gets the acting face (snapshots, trials, gate, MPC, Bayesian search `twin_bayes_optimize`, governed micro-writes `optimization_explore`) — training-while-optimizing is impossible by construction. **Exploration** mode writes through the governed chain with response read-back pairing (every write lands in an `optimization_explorations` ledger); **production** mode requires a bound model that cleared the twin gates (`aml` mode, `boundModelId` at instantiate time). |
|
|
193
204
|
| **Runtime observability** | `GET /api/system/monitor` exposes the agent-team internals as numbers: root queue depth, watchdog interventions, harness session reuse, pending memory outbox — each guarded by a documented rollback switch, so new machinery can be turned off without a redeploy. |
|
|
194
205
|
| **Line operations feed (`/operations`)** | One page for every touch on the plant: a live operation feed (REST snapshot + WS stream) classifies writes, DAQ, AML, recipe, rollback, alarm, line, manual and system actions into **nine categories**, renders structured **before → after diff badges** on write rows (failures marked red), and infers the **closed-loop phase** (monitor → exploration · small-step → recommendation search → shadow verification → production) straight from the event stream. The same feed powers a line-operations panel inside the workshop console. |
|
|
195
|
-
| **External MCP gateway** | `aw mcp` starts a zero-dependency **stdio MCP server** (
|
|
206
|
+
| **External MCP gateway** | `aw mcp` starts a zero-dependency **stdio MCP server** (41 tools) that discovers a running instance automatically (env → lock file → config file) and exposes lines, recipes (incl. mark-good), governed DCW writes, semantic parameter mapping, DAQ queries, channels, team provisioning, model promotion, judge/rollback and plugin management to any MCP client — gated by the `mcp.enabled` runtime setting, with `--doctor` and `--print-config` helpers. Additionally, **every channel member instance gets a dedicated full-tool stdio bridge** (104 host tools + plugin tools, compiled per agent from its role/binding face; ETag/304 incremental polling + `tools/list_changed`) so engines like codex / dsh / opencode consume MCP with the exact same governance chain as native injection (token self-assertion → five-layer re-verification). |
|
|
196
207
|
| **Fully config-driven runtime** | Every runtime knob (memory budgets, compaction, rollback guardrails, retention, backups, log level, system timezone, MCP gate…) is declared once in the settings descriptor registry with precedence **config.yml < runtime-settings < env** — **126 settings across 19 groups** (42 live / 84 restart), no hardcoded defaults in code. |
|
|
197
208
|
| **Configurable system timezone** | One `time.timeZone` setting (IANA id, live-applied) drives human-facing timestamps — logs, chat, audit, agent records and schedules — through a single formatter; machine timelines (DAQ samples, `timestamptz`) stay absolute. |
|
|
198
209
|
| **Configurable cadences** | Sampling and query defaults/floors are **live settings** (`daq.sampling.*`, `daq.query.*`): hot-reloaded, clamped on node create/patch, and agent tool descriptions always carry the current values. |
|
|
@@ -385,7 +396,7 @@ aw update --check # only report; nothing is installed
|
|
|
385
396
|
npm install -g agentworkshop@latest # manual equivalent
|
|
386
397
|
```
|
|
387
398
|
|
|
388
|
-
Releases follow semver. `aw start` verifies the config root on every launch and migrates the legacy pre-`home` `data/` layout into it (newest file wins), so data survives upgrades. SQLite schema migrations run server-side at boot. Current version: **v0.
|
|
399
|
+
Releases follow semver. `aw start` verifies the config root on every launch and migrates the legacy pre-`home` `data/` layout into it (newest file wins), so data survives upgrades. SQLite schema migrations run server-side at boot. Current version: **v0.8.1** — see [Releases](https://github.com/kingdol666/AgentWorkShop/releases).
|
|
389
400
|
|
|
390
401
|
### Your first agent × line session (~2 minutes)
|
|
391
402
|
|
|
@@ -504,6 +515,17 @@ The modeling half of the loop: `/aml` builds **datasets** out of tagged telemetr
|
|
|
504
515
|
- **Two-mode optimization loop**: `aw` ships two channel templates — `chtpl-aml-training-default` (modeling face: 22 tools, no plant writes, no MPC) and `chtpl-aml-optimization-default` (acting face: snapshot/trial/gate/MPC/Bayesian search plus `optimization_explore`, the governed micro-write that pairs every setpoint with its response read-back in an `optimization_explorations` ledger). The faces are mutually exclusive per channel; optimization channels instantiate either in **exploration** mode (governed small steps, no model required) or **aml** mode (`boundModelId` required — a gate-cleared model must be bound before the acting face unlocks).
|
|
505
516
|
- **Twin provider plugin SDK (hot-loaded)**: an industrial scene's physics core / scene packs / objectives / solvers register through `ctx.twin` into the **Twin Provider Registry** (`registerPhysicsProvider` / `registerScenePack` / `registerObjectiveProfile` / `registerTrainingAdapter` / `registerSolverAdapter`, plus `listProviders` / `getProviderHealth` / `resolveProvider` / `validateProvider` / `retireProvider` / `isRegistryAvailable`). Twin tools resolve providers via `SceneContract.physicsProfileId` (falling back to the bundled `twin-injection-default`), so **swapping scenes changes neither tools nor channels**; a hot reload stages a new **generation** and drains the old one while trials and MPC hold leases, so in-flight work is never invalidated and `retireProvider` only unloads at zero references. The bundled injection provider ships through that same external contract (`server/plugins-builtin/twin-injection-default/`), and plugins live in the usual scopes with no restart for disable/reload. Field tables and a runnable example: [`docs/plugins.md`](./docs/plugins.md) → "Hybrid-twin provider plugins"; SDK surface: [`docs/sdk.md`](./docs/sdk.md) §4.10.
|
|
506
517
|
|
|
518
|
+
### Ontology & the AI-first model loop (v0.8.0)
|
|
519
|
+
|
|
520
|
+
The third modeling layer — and the one that makes the loop *self-describing*.
|
|
521
|
+
|
|
522
|
+
- **Authoring surface.** `POST /api/workshop/ontology` opens a draft (optimistic-lock `rev`); the full document (entities, relations, rules, semantic bindings) is validated twice — schema/dimension checks plus **live binding checks against real DAQ/DCW/recipe objects**. Rules then walk a five-state lifecycle (`proposed → reviewed → validated → approved_for_control → deprecated`); control approval needs an approval-ledger entry (second person; single-admin deployments get an audited solo-operator exemption) and `publish` refuses hard rules that never reached it. Versions are immutable — publishing creates a new version, `GET /versions/{id}/compare` returns a four-part diff, and `/ontology` renders graph, compile artifacts, Rule Trace, bindings and version ledger across six tabs. Ten agent tools cover the same surface (`ontology_scene_inspect / node_neighbors / draft_create / draft_validate / draft_update / rule_explain / compile_preview / publish_propose / version_compare / draft_autofix`); four read-only ones are mirrored on the external MCP server. The `/ontology` graph tab renders an interactive node-edge view (self-drawn SVG, MV/CV/structural lanes) with a node drawer that loads direct and 2-hop neighbourhoods from the draft-scoped subgraph API.
|
|
523
|
+
- **Compilation with invariants.** Four artifacts per version — process-model delta (feature candidates, τ = D/v delay priors, monotonicity), ProblemIR delta, scene-contract patch, control-guard set — under **tighten-only** (rules narrow, never widen), PLC-layer separation (interlocks compile to `PLC_LAYER_REQUIRED` traces, not software guards), compile-time rejection of unsupported forms (nonlinear QP, linear coupling), and **hash-domain separation**: `ontologyRefs` are part of the profile content hash but never of the solver's `ProblemIR` hash, so ontology edits surface as `409 ONTOLOGY_PACK_DRIFTED` instead of a bogus IR change.
|
|
524
|
+
- **Runtime effect.** Exactly four things execute: dispatch-time **node-intent guards** (`evaluateOntologyGuardsForNodes` → `409 ONTOLOGY_GUARD_BLOCKED`, fail-closed on unknown state), **training-prior derivation** for dataset/planning, the **scene/guard patch** consumed by the twin, and the **published-version lineage check** pinned in the profile's `ontologyRefs` (re-checked at dispatch). Everything else is reviewable metadata.
|
|
525
|
+
- **The adoption loop — model evolution, not parameter tuning.** `optimizer_profile_propose` closes training → solving: the agent copies the latest *published* profile, swaps in a newly trained model artifact, creates draft v(n+1) and opens a HITL card (`optimizer-profile:<id>@<version>`). Both approval entries route to one service — approve ⇒ publish the draft (frozen hash) + **rebind every binding on the base version** (revision+1; in-flight solves fail closed with `BINDING_STALE`) + audit `optimizer.profile.adopt`; reject/timeout ⇒ zero writes. Compatibility (artifact kind × solver family, D21) is enforced at proposal time, and an agent can only propose inside its own binding face. Verified live in two consecutive evolution rounds (v1 → v2 → v3), each followed by an optimal `optimizer_solve` on the new artifact.
|
|
526
|
+
- **Verified.** 531 unit tests · 44 service-level ontology assertions · **72/72** ontology live e2e · **46/46** model-loop live e2e (twin creation chain + two adoption rounds + zero device writes) · 14 MCP assertions. Reports: [`docs/audit/2026-10-24-ontology-acceptance.md`](./docs/audit/2026-10-24-ontology-acceptance.md), [`docs/audit/2026-10-24-ontology-live-report.md`](./docs/audit/2026-10-24-ontology-live-report.md), [`docs/audit/2026-10-24-model-loop-acceptance.md`](./docs/audit/2026-10-24-model-loop-acceptance.md). Specs: [`docs/plans/2026-10-24-ontology-service-plan.md`](./docs/plans/2026-10-24-ontology-service-plan.md), [`docs/plans/2026-10-24-closed-loop-acceptance.md`](./docs/plans/2026-10-24-closed-loop-acceptance.md).
|
|
527
|
+
- **Boundaries (explicit).** ProblemIR-delta bounds are compiled but not yet consumed as solve constraints; the outcome write-back loop (execution result → recommendation ledger) and per-turn ontology prompt injection remain next-round items; RDF/OWL/SHACL export is not shipped.
|
|
528
|
+
|
|
507
529
|
---
|
|
508
530
|
|
|
509
531
|
## Usage
|
|
@@ -896,7 +918,7 @@ Re-run the paper pipeline locally: set `AW_BENCH_MODE=1` and follow
|
|
|
896
918
|
| Any-scene hybrid-twin modeling loop: scene discover → compile → freeze → physics-spec draft/validate/compile → reference-trainer job (physics calibration + residual ensemble + conformal UQ), model-backed trials, continuous-calibration worker | Shipped |
|
|
897
919
|
| Two-mode optimization loop: dedicated `aml-training` / `aml-optimization` channel templates, mutually exclusive tool faces, exploration ↔ production modes with governed read-back-paired micro-writes | Shipped |
|
|
898
920
|
| Line operations feed: `/operations` page + workshop-console panel, nine-category operation timeline, structured write diffs, closed-loop phase inference | Shipped |
|
|
899
|
-
| External MCP gateway: `aw mcp` stdio server (
|
|
921
|
+
| External MCP gateway: `aw mcp` stdio server (41 tools), instance auto-discovery, `mcp.enabled` runtime gate | Shipped |
|
|
900
922
|
| Configurable system timezone (`time.timeZone`, live) + recipe `stepLimit` per-parameter single-step bound + recipe `description` metadata | Shipped |
|
|
901
923
|
| Production hardening: TLS, MQTT auth, OPC UA sign+encrypt defaults, structured audit log | Planned |
|
|
902
924
|
| Edge deployment shape: standalone edge-agent + central broker | Planned |
|
|
@@ -49,6 +49,7 @@ const menuGroups = computed<MenuGroup[]>(() => [
|
|
|
49
49
|
{ key: '/studio', icon: 'i-tabler-chart-dots', label: t('menu.studio'), motion: 'im-pop' },
|
|
50
50
|
{ key: '/aml', icon: 'i-tabler-flask', label: t('menu.aml'), motion: 'im-pop' },
|
|
51
51
|
{ key: '/optimizer', icon: 'i-tabler-math-function', label: t('menu.optimizer'), motion: 'im-pop' },
|
|
52
|
+
{ key: '/ontology', icon: 'i-tabler-sitemap', label: t('menu.ontology'), motion: 'im-pop' },
|
|
52
53
|
],
|
|
53
54
|
},
|
|
54
55
|
{
|
|
@@ -79,6 +79,11 @@ const { fmtTime, fmtNum, shortId } = useAmlFormat()
|
|
|
79
79
|
:title="m.description || m.label"
|
|
80
80
|
>
|
|
81
81
|
<span class="label-text">{{ m.label || '--' }}</span>
|
|
82
|
+
<span
|
|
83
|
+
v-if="m.description"
|
|
84
|
+
class="desc-text"
|
|
85
|
+
:title="m.description"
|
|
86
|
+
>{{ m.description }}</span>
|
|
82
87
|
</td>
|
|
83
88
|
<td class="mono dim">
|
|
84
89
|
{{ shortId(m.productId) }}
|
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
/**
|
|
3
|
+
* 本体节点-边可视化(自绘 SVG,零第三方图库)。
|
|
4
|
+
*
|
|
5
|
+
* 布局纪律:不做物理模拟 —— 按编译器口径分三道(与 compiler.ts 的 roleBucket 同源):
|
|
6
|
+
* MV = control / disturbance / feature
|
|
7
|
+
* CV = target / observation
|
|
8
|
+
* 结构/状态 = state / guard / 无 role
|
|
9
|
+
* 同道具内按文档顺序均布,因此布局确定性、可被 e2e 用 bounding box 断言。
|
|
10
|
+
*/
|
|
11
|
+
import { computed, useId } from 'vue'
|
|
12
|
+
import type { OntologyEntityDto, OntologyRelationDto } from '@/app/pages/ontology/types'
|
|
13
|
+
|
|
14
|
+
const props = defineProps<{
|
|
15
|
+
entities: OntologyEntityDto[]
|
|
16
|
+
relations: OntologyRelationDto[]
|
|
17
|
+
selectedKey?: string
|
|
18
|
+
}>()
|
|
19
|
+
|
|
20
|
+
const emit = defineEmits<{ select: [key: string] }>()
|
|
21
|
+
|
|
22
|
+
const { t } = useI18n()
|
|
23
|
+
const uid = useId().replace(/[^a-zA-Z0-9_-]/g, '')
|
|
24
|
+
|
|
25
|
+
const WIDTH = 980
|
|
26
|
+
const NODE_R = 7
|
|
27
|
+
const LANE_X = [150, 490, 830]
|
|
28
|
+
|
|
29
|
+
type Lane = 0 | 1 | 2
|
|
30
|
+
const LANE_OF_ROLE: Record<string, Lane> = {
|
|
31
|
+
control: 0,
|
|
32
|
+
disturbance: 0,
|
|
33
|
+
feature: 0,
|
|
34
|
+
target: 1,
|
|
35
|
+
observation: 1,
|
|
36
|
+
state: 2,
|
|
37
|
+
guard: 2,
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function laneOf(entity: OntologyEntityDto): Lane {
|
|
41
|
+
return LANE_OF_ROLE[entity.role ?? ''] ?? 2
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function shortKey(key: string): string {
|
|
45
|
+
const tail = key.includes('.') ? key.slice(key.indexOf('.') + 1) : key
|
|
46
|
+
return tail.length > 18 ? `${tail.slice(0, 17)}…` : tail
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const laneLabels = computed(() => [
|
|
50
|
+
t('ontology.graph.lane.mv'),
|
|
51
|
+
t('ontology.graph.lane.cv'),
|
|
52
|
+
t('ontology.graph.lane.structural'),
|
|
53
|
+
])
|
|
54
|
+
|
|
55
|
+
const laneMembers = computed<OntologyEntityDto[][]>(() => {
|
|
56
|
+
const lanes: OntologyEntityDto[][] = [[], [], []]
|
|
57
|
+
for (const entity of props.entities) lanes[laneOf(entity)]!.push(entity)
|
|
58
|
+
return lanes
|
|
59
|
+
})
|
|
60
|
+
|
|
61
|
+
const height = computed(() => {
|
|
62
|
+
const maxCount = Math.max(1, ...laneMembers.value.map(list => list.length))
|
|
63
|
+
return Math.max(360, Math.min(760, maxCount * 46 + 96))
|
|
64
|
+
})
|
|
65
|
+
|
|
66
|
+
const positions = computed(() => {
|
|
67
|
+
const map = new Map<string, { x: number, y: number, lane: Lane }>()
|
|
68
|
+
laneMembers.value.forEach((members, lane) => {
|
|
69
|
+
const count = members.length
|
|
70
|
+
members.forEach((entity, index) => {
|
|
71
|
+
const span = height.value - 96
|
|
72
|
+
const y = count === 1 ? 48 + span / 2 : 48 + (span * index) / (count - 1)
|
|
73
|
+
map.set(entity.key, { x: LANE_X[lane]!, y, lane: lane as Lane })
|
|
74
|
+
})
|
|
75
|
+
})
|
|
76
|
+
return map
|
|
77
|
+
})
|
|
78
|
+
|
|
79
|
+
const entityKeys = computed(() => new Set(props.entities.map(e => e.key)))
|
|
80
|
+
|
|
81
|
+
const visibleRelations = computed(() => props.relations.filter(
|
|
82
|
+
relation => entityKeys.value.has(relation.srcKey) && entityKeys.value.has(relation.dstKey),
|
|
83
|
+
))
|
|
84
|
+
|
|
85
|
+
const edgePaths = computed(() => visibleRelations.value.flatMap((relation, index) => {
|
|
86
|
+
const from = positions.value.get(relation.srcKey)
|
|
87
|
+
const to = positions.value.get(relation.dstKey)
|
|
88
|
+
if (!from || !to) return []
|
|
89
|
+
const tier = relation.properties?.evidenceTier ?? 'candidate_influence'
|
|
90
|
+
const sameLane = from.lane === to.lane
|
|
91
|
+
const curve = sameLane ? 46 + index * 6 : 0
|
|
92
|
+
const x1 = from.x + (to.x >= from.x ? NODE_R : -NODE_R)
|
|
93
|
+
const x2 = to.x + (to.x >= from.x ? -NODE_R : NODE_R)
|
|
94
|
+
const cx1 = sameLane ? from.x + curve : (x1 + x2) / 2
|
|
95
|
+
const cx2 = sameLane ? to.x + curve : (x1 + x2) / 2
|
|
96
|
+
return [{
|
|
97
|
+
id: relation.id,
|
|
98
|
+
kind: relation.kind,
|
|
99
|
+
tier,
|
|
100
|
+
d: `M ${x1} ${from.y} C ${cx1} ${from.y}, ${cx2} ${to.y}, ${x2} ${to.y}`,
|
|
101
|
+
labelX: (x1 + x2) / 2,
|
|
102
|
+
labelY: (from.y + to.y) / 2,
|
|
103
|
+
src: relation.srcKey,
|
|
104
|
+
dst: relation.dstKey,
|
|
105
|
+
}]
|
|
106
|
+
}))
|
|
107
|
+
|
|
108
|
+
const tierClass = (tier: string): string => `tier-${tier.replace(/_/g, '-')}`
|
|
109
|
+
|
|
110
|
+
function onSelect(key: string): void {
|
|
111
|
+
emit('select', key)
|
|
112
|
+
}
|
|
113
|
+
</script>
|
|
114
|
+
|
|
115
|
+
<template>
|
|
116
|
+
<div
|
|
117
|
+
class="ontology-graph"
|
|
118
|
+
data-testid="ontology-graph"
|
|
119
|
+
>
|
|
120
|
+
<svg
|
|
121
|
+
class="graph-svg"
|
|
122
|
+
:viewBox="`0 0 ${WIDTH} ${height}`"
|
|
123
|
+
:style="{ height: `${height}px` }"
|
|
124
|
+
role="img"
|
|
125
|
+
:aria-label="t('ontology.graph.aria')"
|
|
126
|
+
>
|
|
127
|
+
<defs>
|
|
128
|
+
<marker
|
|
129
|
+
:id="`ont-arrow-${uid}`"
|
|
130
|
+
viewBox="0 0 10 10"
|
|
131
|
+
refX="9"
|
|
132
|
+
refY="5"
|
|
133
|
+
markerWidth="6"
|
|
134
|
+
markerHeight="6"
|
|
135
|
+
orient="auto-start-reverse"
|
|
136
|
+
>
|
|
137
|
+
<path
|
|
138
|
+
d="M 0 0 L 10 5 L 0 10 z"
|
|
139
|
+
class="edge-arrow"
|
|
140
|
+
/>
|
|
141
|
+
</marker>
|
|
142
|
+
</defs>
|
|
143
|
+
|
|
144
|
+
<g
|
|
145
|
+
v-for="(label, index) in laneLabels"
|
|
146
|
+
:key="label"
|
|
147
|
+
class="lane"
|
|
148
|
+
>
|
|
149
|
+
<line
|
|
150
|
+
:x1="LANE_X[index]"
|
|
151
|
+
y1="30"
|
|
152
|
+
:x2="LANE_X[index]"
|
|
153
|
+
:y2="height - 30"
|
|
154
|
+
class="lane-line"
|
|
155
|
+
/>
|
|
156
|
+
<text
|
|
157
|
+
:x="LANE_X[index]"
|
|
158
|
+
y="18"
|
|
159
|
+
class="lane-label"
|
|
160
|
+
>{{ label }}</text>
|
|
161
|
+
</g>
|
|
162
|
+
|
|
163
|
+
<g
|
|
164
|
+
v-for="edge in edgePaths"
|
|
165
|
+
:key="edge.id"
|
|
166
|
+
:data-edge-id="edge.id"
|
|
167
|
+
:data-src="edge.src"
|
|
168
|
+
:data-dst="edge.dst"
|
|
169
|
+
:data-kind="edge.kind"
|
|
170
|
+
:data-tier="edge.tier"
|
|
171
|
+
class="edge"
|
|
172
|
+
:class="tierClass(edge.tier)"
|
|
173
|
+
>
|
|
174
|
+
<title>{{ edge.id }} · {{ edge.kind }}</title>
|
|
175
|
+
<path
|
|
176
|
+
:d="edge.d"
|
|
177
|
+
class="edge-line"
|
|
178
|
+
:marker-end="`url(#ont-arrow-${uid})`"
|
|
179
|
+
/>
|
|
180
|
+
</g>
|
|
181
|
+
|
|
182
|
+
<g
|
|
183
|
+
v-for="entity in entities"
|
|
184
|
+
:key="entity.key"
|
|
185
|
+
:data-node-key="entity.key"
|
|
186
|
+
:data-role="entity.role ?? ''"
|
|
187
|
+
:data-kind="entity.kind"
|
|
188
|
+
class="node"
|
|
189
|
+
:class="{ selected: entity.key === selectedKey }"
|
|
190
|
+
role="button"
|
|
191
|
+
tabindex="0"
|
|
192
|
+
:aria-label="`${entity.key} · ${entity.name}`"
|
|
193
|
+
@click="onSelect(entity.key)"
|
|
194
|
+
@keydown.enter="onSelect(entity.key)"
|
|
195
|
+
@keydown.space.prevent="onSelect(entity.key)"
|
|
196
|
+
>
|
|
197
|
+
<title>{{ entity.key }} · {{ entity.name }}{{ entity.unit ? ` (${entity.unit})` : '' }}</title>
|
|
198
|
+
<circle
|
|
199
|
+
v-if="entity.key === selectedKey"
|
|
200
|
+
:cx="positions.get(entity.key)?.x ?? 0"
|
|
201
|
+
:cy="positions.get(entity.key)?.y ?? 0"
|
|
202
|
+
:r="NODE_R + 5"
|
|
203
|
+
class="node-halo"
|
|
204
|
+
data-role="selection-halo"
|
|
205
|
+
/>
|
|
206
|
+
<circle
|
|
207
|
+
:cx="positions.get(entity.key)?.x ?? 0"
|
|
208
|
+
:cy="positions.get(entity.key)?.y ?? 0"
|
|
209
|
+
:r="NODE_R"
|
|
210
|
+
class="node-dot"
|
|
211
|
+
/>
|
|
212
|
+
<text
|
|
213
|
+
:x="(positions.get(entity.key)?.x ?? 0) + NODE_R + 6"
|
|
214
|
+
:y="(positions.get(entity.key)?.y ?? 0) + 4"
|
|
215
|
+
class="node-label"
|
|
216
|
+
>{{ shortKey(entity.key) }}</text>
|
|
217
|
+
</g>
|
|
218
|
+
</svg>
|
|
219
|
+
|
|
220
|
+
<div class="legend">
|
|
221
|
+
<span class="legend-item candidate_influence">{{ t('ontology.graph.tier.candidate') }}</span>
|
|
222
|
+
<span class="legend-item observed_correlation">{{ t('ontology.graph.tier.observed') }}</span>
|
|
223
|
+
<span class="legend-item validated_control">{{ t('ontology.graph.tier.validated') }}</span>
|
|
224
|
+
</div>
|
|
225
|
+
</div>
|
|
226
|
+
</template>
|
|
227
|
+
|
|
228
|
+
<style scoped>
|
|
229
|
+
.ontology-graph {
|
|
230
|
+
border: 1px solid var(--line);
|
|
231
|
+
border-radius: 10px;
|
|
232
|
+
padding: 8px 10px 4px;
|
|
233
|
+
background: var(--paper-raised);
|
|
234
|
+
overflow-x: auto;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
.graph-svg {
|
|
238
|
+
width: 100%;
|
|
239
|
+
min-width: 720px;
|
|
240
|
+
display: block;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
.lane-line {
|
|
244
|
+
stroke: var(--line);
|
|
245
|
+
stroke-width: 1;
|
|
246
|
+
stroke-dasharray: 2 6;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
.lane-label {
|
|
250
|
+
fill: var(--ink-faint);
|
|
251
|
+
font-size: 11px;
|
|
252
|
+
text-anchor: middle;
|
|
253
|
+
letter-spacing: 0.08em;
|
|
254
|
+
text-transform: uppercase;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
.edge-line {
|
|
258
|
+
fill: none;
|
|
259
|
+
stroke-width: 1.4;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
.edge-arrow {
|
|
263
|
+
fill: var(--ink-faint);
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
.edge.tier-candidate-influence .edge-line {
|
|
267
|
+
stroke: var(--ink-faint);
|
|
268
|
+
stroke-dasharray: 3 4;
|
|
269
|
+
opacity: 0.7;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
.edge.tier-observed-correlation .edge-line {
|
|
273
|
+
stroke: var(--tone-info-dot);
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
.edge.tier-validated-control .edge-line {
|
|
277
|
+
stroke: var(--tone-success-dot);
|
|
278
|
+
stroke-width: 2.2;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
.node {
|
|
282
|
+
cursor: pointer;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
.node-dot {
|
|
286
|
+
fill: var(--paper-raised);
|
|
287
|
+
stroke: var(--line-strong);
|
|
288
|
+
stroke-width: 1.6;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
.node[data-role='control'] .node-dot,
|
|
292
|
+
.node[data-role='disturbance'] .node-dot,
|
|
293
|
+
.node[data-role='feature'] .node-dot {
|
|
294
|
+
stroke: var(--tone-info-dot);
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
.node[data-role='target'] .node-dot {
|
|
298
|
+
stroke: var(--tone-success-dot);
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
.node[data-role='guard'] .node-dot {
|
|
302
|
+
stroke: var(--tone-danger-dot);
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
.node-halo {
|
|
306
|
+
fill: none;
|
|
307
|
+
stroke: var(--focus-ring);
|
|
308
|
+
stroke-width: 1.3;
|
|
309
|
+
stroke-dasharray: 3 3;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
.node-label {
|
|
313
|
+
fill: var(--ink-soft);
|
|
314
|
+
font-size: 11px;
|
|
315
|
+
font-family: var(--font-mono, ui-monospace, monospace);
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
.node.selected .node-label {
|
|
319
|
+
fill: var(--ink);
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
.node:focus-visible .node-dot {
|
|
323
|
+
stroke: var(--focus-ring);
|
|
324
|
+
stroke-width: 2.4;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
.legend {
|
|
328
|
+
display: flex;
|
|
329
|
+
gap: 14px;
|
|
330
|
+
padding: 2px 4px 6px;
|
|
331
|
+
font-size: 11px;
|
|
332
|
+
color: var(--ink-faint);
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
.legend-item::before {
|
|
336
|
+
content: '';
|
|
337
|
+
display: inline-block;
|
|
338
|
+
width: 18px;
|
|
339
|
+
height: 0;
|
|
340
|
+
margin-right: 5px;
|
|
341
|
+
vertical-align: middle;
|
|
342
|
+
border-top: 1.4px solid var(--ink-faint);
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
.legend-item.candidate_influence::before {
|
|
346
|
+
border-top-style: dashed;
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
.legend-item.observed_correlation::before {
|
|
350
|
+
border-top-color: var(--tone-info-dot);
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
.legend-item.validated_control::before {
|
|
354
|
+
border-top: 2.2px solid var(--tone-success-dot);
|
|
355
|
+
}
|
|
356
|
+
</style>
|
package/app/pages/aml/styles.css
CHANGED
|
@@ -169,6 +169,7 @@ h1 { margin: 2px 0 4px; font-size: 28px; font-weight: 600; letter-spacing: -0.02
|
|
|
169
169
|
.note-cell { max-width: 260px; }
|
|
170
170
|
.label-cell { max-width: 220px; }
|
|
171
171
|
.label-cell .label-text { display: inline-block; overflow: hidden; width: 100%; text-overflow: ellipsis; white-space: nowrap; }
|
|
172
|
+
.label-cell .desc-text { display: block; margin-top: 2px; color: var(--ink-faint, #8b98a5); font-size: 11px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 320px; }
|
|
172
173
|
.note { display: inline-block; overflow: hidden; width: 100%; text-overflow: ellipsis; white-space: nowrap; }
|
|
173
174
|
.kind {
|
|
174
175
|
margin-left: 6px;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/** Ontology 页面 REST 封装(与 Agent 工具/MCP 共用同一服务层)。 */
|
|
2
|
+
import { apiFetch } from '~/composables/workshop/apiClient'
|
|
3
|
+
|
|
4
|
+
type JsonInit = Omit<RequestInit, 'body'> & { body?: unknown }
|
|
5
|
+
|
|
6
|
+
function withJson(init?: JsonInit): RequestInit | undefined {
|
|
7
|
+
if (!init) return undefined
|
|
8
|
+
const { body, ...rest } = init
|
|
9
|
+
if (body === undefined) return rest
|
|
10
|
+
return {
|
|
11
|
+
...rest,
|
|
12
|
+
headers: { 'content-type': 'application/json', ...(rest.headers as Record<string, string> | undefined) },
|
|
13
|
+
body: JSON.stringify(body),
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export const ontologyApi = <T>(path: string, init?: JsonInit) =>
|
|
18
|
+
apiFetch<T>({ base: '/api/workshop/ontology', path, init: withJson(init) })
|