agentworkshop 0.7.70 → 0.8.0
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 +3943 -2786
- package/.output/.AgentWorkShop/aml-python/requirements.txt +3 -0
- package/.output/.AgentWorkShop/optimizer-python/probe.py +24 -0
- package/.output/.AgentWorkShop/optimizer-python/problems.py +347 -0
- package/.output/.AgentWorkShop/optimizer-python/worker.py +119 -0
- package/.output/.AgentWorkShop/prompts/host-tools.json +3943 -2786
- package/.output/.AgentWorkShop/schema.json +14 -5
- package/.output/nitro.json +1 -1
- package/.output/public/_nuxt/{zzV9kr9T.js → B6jtLy6z.js} +2 -2
- package/.output/public/_nuxt/BBw9ylUY2.js +1 -0
- package/.output/public/_nuxt/BH8RvpVy.js +1 -0
- package/.output/public/_nuxt/BO0BJx3w2.js +8 -0
- package/.output/public/_nuxt/Bcs9zzO62.js +1 -0
- package/.output/public/_nuxt/BnNmkGJS2.js +36 -0
- package/.output/public/_nuxt/Byf4IxU2.js +14 -0
- package/.output/public/_nuxt/CxVhG0Xx.js +1 -0
- package/.output/public/_nuxt/D0mzKkZr.js +1 -0
- package/.output/public/_nuxt/{DoGa0vsN.js → DBtXLkyA.js} +1 -1
- package/.output/public/_nuxt/DIFkTkdS.js +1 -0
- package/.output/public/_nuxt/DPvZxAt02.js +1 -0
- package/.output/public/_nuxt/DbeNMehP.js +1 -0
- package/.output/public/_nuxt/DgrK8UCQ.js +0 -0
- package/.output/public/_nuxt/NXY37IO62.js +1 -0
- package/.output/public/_nuxt/board.Bo35UR0e.css +1 -0
- package/.output/public/_nuxt/builds/latest.json +1 -1
- package/.output/public/_nuxt/builds/meta/7a79a7e4-d691-4cf5-ae3a-3b01814479fb.json +1 -0
- package/.output/public/_nuxt/{data.D7XYoiL8.css → data.jRO2K9JI.css} +1 -1
- package/.output/public/_nuxt/{default.C9eAl1QW.css → default.BEXGWZFQ.css} +1 -1
- package/.output/public/_nuxt/{entry.DI0qLRfo.css → entry.C7koBPom.css} +1 -1
- package/.output/public/_nuxt/ontology.QMGeh66l.css +1 -0
- package/.output/public/_nuxt/optimizer.B8gCbU1b.css +1 -0
- package/.output/public/_nuxt/studio.CjmUr8P7.css +1 -0
- package/.output/server/chunks/_/access.mjs +165 -0
- package/.output/server/chunks/_/access.mjs.map +1 -0
- package/.output/server/chunks/_/binding-authz.mjs +1 -1
- package/.output/server/chunks/_/catalog-view.mjs +2 -1
- package/.output/server/chunks/_/catalog-view.mjs.map +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/_/dataset-reader.mjs +61 -0
- package/.output/server/chunks/_/dataset-reader.mjs.map +1 -0
- package/.output/server/chunks/_/eda-run.repo.mjs +10 -6
- package/.output/server/chunks/_/eda-run.repo.mjs.map +1 -1
- package/.output/server/chunks/_/entity.mjs +1 -1
- package/.output/server/chunks/_/features.mjs +6 -5
- package/.output/server/chunks/_/features.mjs.map +1 -1
- package/.output/server/chunks/_/golden.mjs +3 -3
- package/.output/server/chunks/_/host-bindings.mjs +2 -1
- package/.output/server/chunks/_/host-bindings.mjs.map +1 -1
- package/.output/server/chunks/_/index.mjs +583 -0
- package/.output/server/chunks/_/index.mjs.map +1 -0
- package/.output/server/chunks/_/mes-console.mjs +1 -1
- package/.output/server/chunks/_/nitro.mjs +17568 -9034
- package/.output/server/chunks/_/nitro.mjs.map +1 -1
- package/.output/server/chunks/_/ocap.mjs +1 -1
- package/.output/server/chunks/_/rest-auth.mjs +44 -0
- package/.output/server/chunks/_/rest-auth.mjs.map +1 -0
- package/.output/server/chunks/_/scene-layout.repo.mjs +1 -1
- package/.output/server/chunks/_/spc.mjs +3 -2
- package/.output/server/chunks/_/spc.mjs.map +1 -1
- package/.output/server/chunks/build/TownView-BWMDbosY.mjs +1 -1
- package/.output/server/chunks/build/_id_-BK-t8nRG.mjs +1 -0
- package/.output/server/chunks/build/_id_-BK-t8nRG.mjs.map +1 -1
- package/.output/server/chunks/build/_id_-CZPlPDm4.mjs +1 -0
- package/.output/server/chunks/build/_id_-CZPlPDm4.mjs.map +1 -1
- package/.output/server/chunks/build/{_wsId_-BXSYXXXX.mjs → _wsId_-BNKrrV1H.mjs} +23 -2
- package/.output/server/chunks/build/{_wsId_-BXSYXXXX.mjs.map → _wsId_-BNKrrV1H.mjs.map} +1 -1
- package/.output/server/chunks/build/agents-8tV9xL97.mjs +1 -0
- package/.output/server/chunks/build/agents-8tV9xL97.mjs.map +1 -1
- package/.output/server/chunks/build/aml-BNTEDOsl.mjs +1 -0
- package/.output/server/chunks/build/aml-BNTEDOsl.mjs.map +1 -1
- package/.output/server/chunks/build/analysis-p-dBkjoK.mjs +1 -0
- package/.output/server/chunks/build/analysis-p-dBkjoK.mjs.map +1 -1
- package/.output/server/chunks/build/api-B4Om0mEc.mjs +1 -0
- package/.output/server/chunks/build/api-B4Om0mEc.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/api-BsAgXWxi.mjs +72 -0
- package/.output/server/chunks/build/api-BsAgXWxi.mjs.map +1 -0
- package/.output/server/chunks/build/{board-C6JysYLg.mjs → board-Dl2Ar22r.mjs} +26 -38
- package/.output/server/chunks/build/board-Dl2Ar22r.mjs.map +1 -0
- package/.output/server/chunks/build/channel-templates-Iot9Y3vV.mjs +1 -0
- package/.output/server/chunks/build/channel-templates-Iot9Y3vV.mjs.map +1 -1
- package/.output/server/chunks/build/chart-trend-BWeZh5Lv.mjs +117 -0
- package/.output/server/chunks/build/chart-trend-BWeZh5Lv.mjs.map +1 -0
- package/.output/server/chunks/build/constants-HPHJvjne.mjs +1 -0
- package/.output/server/chunks/build/constants-HPHJvjne.mjs.map +1 -1
- package/.output/server/chunks/build/daq-CdxcfY_G.mjs +2 -1
- package/.output/server/chunks/build/daq-CdxcfY_G.mjs.map +1 -1
- package/.output/server/chunks/build/{data-DL68QJ5W.mjs → data-D8uX1dnm.mjs} +37 -33
- package/.output/server/chunks/build/data-D8uX1dnm.mjs.map +1 -0
- package/.output/server/chunks/build/dcw-BlDQtS4q.mjs +2 -1
- package/.output/server/chunks/build/dcw-BlDQtS4q.mjs.map +1 -1
- package/.output/server/chunks/build/{default-Dt1B8QzV.mjs → default-CJkOcmrm.mjs} +21 -8
- package/.output/server/chunks/build/{default-Dt1B8QzV.mjs.map → default-CJkOcmrm.mjs.map} +1 -1
- package/.output/server/chunks/build/es-Bxu10NJ2.mjs +1 -0
- package/.output/server/chunks/build/es-Bxu10NJ2.mjs.map +1 -1
- package/.output/server/chunks/build/logs-BTfJQ6vQ.mjs +1 -0
- package/.output/server/chunks/build/logs-BTfJQ6vQ.mjs.map +1 -1
- package/.output/server/chunks/build/monitor-DvaR3yo8.mjs +1 -0
- package/.output/server/chunks/build/ontology-C3HS5pMo.mjs +977 -0
- package/.output/server/chunks/build/ontology-C3HS5pMo.mjs.map +1 -0
- package/.output/server/chunks/build/operations-Cl8nVm9D.mjs +1 -0
- package/.output/server/chunks/build/operations-Cl8nVm9D.mjs.map +1 -1
- package/.output/server/chunks/build/optimizer-BOtGWEtc.mjs +200 -0
- package/.output/server/chunks/build/optimizer-BOtGWEtc.mjs.map +1 -0
- package/.output/server/chunks/build/pages-AFRP4-EL.mjs +1 -0
- package/.output/server/chunks/build/pages-AFRP4-EL.mjs.map +1 -1
- package/.output/server/chunks/build/permissions-CVTfixZj.mjs +1 -0
- package/.output/server/chunks/build/permissions-CVTfixZj.mjs.map +1 -1
- package/.output/server/chunks/build/plugins-LRjaSEZy.mjs +1 -0
- package/.output/server/chunks/build/plugins-LRjaSEZy.mjs.map +1 -1
- package/.output/server/chunks/build/schedules-BLhn2CLn.mjs +1 -0
- package/.output/server/chunks/build/settings-DIf_iYdu.mjs +1 -0
- package/.output/server/chunks/build/settings-DIf_iYdu.mjs.map +1 -1
- package/.output/server/chunks/build/{studio-DjhjwH4s.mjs → studio-cdoNCfyy.mjs} +55 -106
- package/.output/server/chunks/build/studio-cdoNCfyy.mjs.map +1 -0
- package/.output/server/chunks/build/teams-B2J6ouRY.mjs +1 -0
- package/.output/server/chunks/build/teams-B2J6ouRY.mjs.map +1 -1
- package/.output/server/chunks/build/tokens-DFQGaN2n.mjs +1 -0
- package/.output/server/chunks/build/tokens-DFQGaN2n.mjs.map +1 -1
- package/.output/server/chunks/build/tools-DWJFnU_t.mjs +1 -0
- package/.output/server/chunks/build/tools-DWJFnU_t.mjs.map +1 -1
- package/.output/server/chunks/build/town-B5aoiG98.mjs +1 -0
- package/.output/server/chunks/build/town-B5aoiG98.mjs.map +1 -1
- package/.output/server/chunks/build/town-BV-hbwb5.mjs +1 -0
- package/.output/server/chunks/build/town-BV-hbwb5.mjs.map +1 -1
- package/.output/server/chunks/build/types-D6J7slEa.mjs +6 -2
- package/.output/server/chunks/build/types-DWqIeMRP.mjs +1 -0
- package/.output/server/chunks/build/types-DWqIeMRP.mjs.map +1 -1
- package/.output/server/chunks/build/useAgentHarnessOptions-DOrQHeBh.mjs +1 -0
- package/.output/server/chunks/build/useAgentHarnessOptions-DOrQHeBh.mjs.map +1 -1
- package/.output/server/chunks/build/useAgentTemplateActions-CzlplRWh.mjs +1 -0
- package/.output/server/chunks/build/useAgentTemplateActions-CzlplRWh.mjs.map +1 -1
- package/.output/server/chunks/build/useAgentTemplateDialogState-CZzpu5og.mjs +1 -0
- package/.output/server/chunks/build/useAgentTemplateDialogState-CZzpu5og.mjs.map +1 -1
- package/.output/server/chunks/build/useAgentTemplateForm-DQo1enf2.mjs +1 -0
- package/.output/server/chunks/build/useAgentTemplateForm-DQo1enf2.mjs.map +1 -1
- package/.output/server/chunks/build/useAgentTemplatesCatalog-DP-iMmqz.mjs +1 -0
- package/.output/server/chunks/build/useAgentTemplatesCatalog-DP-iMmqz.mjs.map +1 -1
- package/.output/server/chunks/build/useAmlDatasets-DeoE1idn.mjs +1 -0
- package/.output/server/chunks/build/useAmlDatasets-DeoE1idn.mjs.map +1 -1
- package/.output/server/chunks/build/useAmlEntities-BJhvdqHJ.mjs +1 -0
- package/.output/server/chunks/build/useAmlEntities-BJhvdqHJ.mjs.map +1 -1
- package/.output/server/chunks/build/useAmlEnv-CDIZ6xTe.mjs +1 -0
- package/.output/server/chunks/build/useAmlEnv-CDIZ6xTe.mjs.map +1 -1
- package/.output/server/chunks/build/useAmlExperiments-Dloi834i.mjs +1 -0
- package/.output/server/chunks/build/useAmlExperiments-Dloi834i.mjs.map +1 -1
- package/.output/server/chunks/build/useAmlFormat-C2sl3MGB.mjs +1 -0
- package/.output/server/chunks/build/useAmlFormat-C2sl3MGB.mjs.map +1 -1
- package/.output/server/chunks/build/useAmlJobs-BF9LpwXz.mjs +1 -0
- package/.output/server/chunks/build/useAmlJobs-BF9LpwXz.mjs.map +1 -1
- package/.output/server/chunks/build/useAmlModels-_bweOr3R.mjs +1 -0
- package/.output/server/chunks/build/useAmlModels-_bweOr3R.mjs.map +1 -1
- package/.output/server/chunks/build/useAmlNotes-DQj980iX.mjs +1 -0
- package/.output/server/chunks/build/useAmlNotes-DQj980iX.mjs.map +1 -1
- package/.output/server/chunks/build/useAmlPredict-DHNgDSJn.mjs +1 -0
- package/.output/server/chunks/build/useAmlPredict-DHNgDSJn.mjs.map +1 -1
- package/.output/server/chunks/build/useAnalysisFeed-BrEGV_9x.mjs +1 -0
- package/.output/server/chunks/build/useAnalysisFeed-BrEGV_9x.mjs.map +1 -1
- package/.output/server/chunks/build/useDaqAddNode-D_Rkju0f.mjs +2 -1
- package/.output/server/chunks/build/useDaqAddNode-D_Rkju0f.mjs.map +1 -1
- package/.output/server/chunks/build/useDaqDetailBinding-DCWaLKXT.mjs +1 -0
- package/.output/server/chunks/build/useDaqDetailBinding-DCWaLKXT.mjs.map +1 -1
- package/.output/server/chunks/build/useDaqDetailFrames-BOIcOJRB.mjs +1 -0
- package/.output/server/chunks/build/useDaqDetailFrames-BOIcOJRB.mjs.map +1 -1
- package/.output/server/chunks/build/useDaqDetailHistory-D6WulPVs.mjs +1 -0
- package/.output/server/chunks/build/useDaqDetailHistory-D6WulPVs.mjs.map +1 -1
- package/.output/server/chunks/build/useDaqDetailNode-DeOsDxK5.mjs +2 -1
- package/.output/server/chunks/build/useDaqDetailNode-DeOsDxK5.mjs.map +1 -1
- package/.output/server/chunks/build/useDaqDetailParams-Cm9a9r5G.mjs +2 -1
- package/.output/server/chunks/build/useDaqDetailParams-Cm9a9r5G.mjs.map +1 -1
- package/.output/server/chunks/build/useDaqFilters-CctmO03p.mjs +2 -1
- package/.output/server/chunks/build/useDaqFilters-CctmO03p.mjs.map +1 -1
- package/.output/server/chunks/build/useDaqNodeWindow-1DWj2H5G.mjs +1 -0
- package/.output/server/chunks/build/useDaqNodeWindow-1DWj2H5G.mjs.map +1 -1
- package/.output/server/chunks/build/useDaqOptimizations-CmX_dpBc.mjs +1 -0
- package/.output/server/chunks/build/useDaqOptimizations-CmX_dpBc.mjs.map +1 -1
- package/.output/server/chunks/build/useDaqStream-B9ZBVQrI.mjs +1 -1
- package/.output/server/chunks/build/useDaqTemplates-CK37sMfi.mjs +2 -1
- package/.output/server/chunks/build/useDaqTemplates-CK37sMfi.mjs.map +1 -1
- package/.output/server/chunks/build/useDashboardCharts-D45083s_.mjs +1 -0
- package/.output/server/chunks/build/useDashboardCharts-D45083s_.mjs.map +1 -1
- package/.output/server/chunks/build/useDashboardData-B36wVWo2.mjs +1 -0
- package/.output/server/chunks/build/useDashboardData-B36wVWo2.mjs.map +1 -1
- package/.output/server/chunks/build/useDcwAddNode-DACVcEHs.mjs +2 -1
- package/.output/server/chunks/build/useDcwAddNode-DACVcEHs.mjs.map +1 -1
- package/.output/server/chunks/build/useDcwCards-SaiImIYQ.mjs +1 -0
- package/.output/server/chunks/build/useDcwCards-SaiImIYQ.mjs.map +1 -1
- package/.output/server/chunks/build/useDcwDetailScope-DLOklSMO.mjs +1 -0
- package/.output/server/chunks/build/useDcwDetailScope-DLOklSMO.mjs.map +1 -1
- package/.output/server/chunks/build/useDcwDetailTemplates-ClmIdZ40.mjs +1 -0
- package/.output/server/chunks/build/useDcwDetailTemplates-ClmIdZ40.mjs.map +1 -1
- package/.output/server/chunks/build/useDcwFilter-CPMyCltx.mjs +1 -0
- package/.output/server/chunks/build/useDcwFilter-CPMyCltx.mjs.map +1 -1
- package/.output/server/chunks/build/useDcwLedger-0ie-0WTc.mjs +1 -0
- package/.output/server/chunks/build/useDcwLedger-0ie-0WTc.mjs.map +1 -1
- package/.output/server/chunks/build/useDcwLineMutations-DNxo66yM.mjs +1 -0
- package/.output/server/chunks/build/useDcwLineMutations-DNxo66yM.mjs.map +1 -1
- package/.output/server/chunks/build/useDcwLineRun-CHskwscT.mjs +1 -0
- package/.output/server/chunks/build/useDcwLineRun-CHskwscT.mjs.map +1 -1
- package/.output/server/chunks/build/useDcwParamApprovals-DtScUc-W.mjs +1 -0
- package/.output/server/chunks/build/useDcwParamApprovals-DtScUc-W.mjs.map +1 -1
- package/.output/server/chunks/build/useDcwProducts-BMaxzLu6.mjs +1 -0
- package/.output/server/chunks/build/useDcwProducts-BMaxzLu6.mjs.map +1 -1
- package/.output/server/chunks/build/useDcwQuery-TVU3Eo0M.mjs +1 -0
- package/.output/server/chunks/build/useDcwQuery-TVU3Eo0M.mjs.map +1 -1
- package/.output/server/chunks/build/useDcwQuickActions-BREFmR9T.mjs +1 -0
- package/.output/server/chunks/build/useDcwQuickActions-BREFmR9T.mjs.map +1 -1
- package/.output/server/chunks/build/useDcwRecipes-Bc9urA1N.mjs +1 -0
- package/.output/server/chunks/build/useDcwRecipes-Bc9urA1N.mjs.map +1 -1
- package/.output/server/chunks/build/useDcwStream-Dir5ufAU.mjs +1 -1
- package/.output/server/chunks/build/useDcwTemplates-BzagZztS.mjs +1 -0
- package/.output/server/chunks/build/useDcwTemplates-BzagZztS.mjs.map +1 -1
- package/.output/server/chunks/build/useDcwWrites-BROwTLCn.mjs +1 -0
- package/.output/server/chunks/build/useDcwWrites-BROwTLCn.mjs.map +1 -1
- package/.output/server/chunks/build/useExpConfirmations-BM626N4p.mjs +1 -0
- package/.output/server/chunks/build/useExpConfirmations-BM626N4p.mjs.map +1 -1
- package/.output/server/chunks/build/useLogsFormat-B-o4MHy7.mjs +1 -0
- package/.output/server/chunks/build/useLogsFormat-B-o4MHy7.mjs.map +1 -1
- package/.output/server/chunks/build/useLogsManual-cVBZQ_Mt.mjs +1 -0
- package/.output/server/chunks/build/useLogsManual-cVBZQ_Mt.mjs.map +1 -1
- package/.output/server/chunks/build/useLogsQuery-D7hrJ3yn.mjs +1 -0
- package/.output/server/chunks/build/useLogsQuery-D7hrJ3yn.mjs.map +1 -1
- package/.output/server/chunks/build/useLogsScope-aaPQeTRm.mjs +1 -0
- package/.output/server/chunks/build/useLogsScope-aaPQeTRm.mjs.map +1 -1
- package/.output/server/chunks/build/useMonitorColumns-vVnt3r5Q.mjs +1 -0
- package/.output/server/chunks/build/useMonitorColumns-vVnt3r5Q.mjs.map +1 -1
- package/.output/server/chunks/build/useMonitorData-DIkiLr_h.mjs +1 -0
- package/.output/server/chunks/build/useMonitorData-DIkiLr_h.mjs.map +1 -1
- package/.output/server/chunks/build/useMonitorFormat-CyURtH8N.mjs +1 -0
- package/.output/server/chunks/build/useMonitorFormat-CyURtH8N.mjs.map +1 -1
- package/.output/server/chunks/build/useMonitorTerminal-Dj4QwRNW.mjs +1 -0
- package/.output/server/chunks/build/useMonitorTerminal-Dj4QwRNW.mjs.map +1 -1
- package/.output/server/chunks/build/useOperationsFeed-Ci4mZAn_.mjs +1 -0
- package/.output/server/chunks/build/useOperationsFeed-Ci4mZAn_.mjs.map +1 -1
- package/.output/server/chunks/build/useRecipeDispatchApprovals-BYtiqfeb.mjs +1 -0
- package/.output/server/chunks/build/useRecipeDispatchApprovals-BYtiqfeb.mjs.map +1 -1
- package/.output/server/chunks/build/useTeamActions-I_8QWp9w.mjs +1 -0
- package/.output/server/chunks/build/useTeamActions-I_8QWp9w.mjs.map +1 -1
- package/.output/server/chunks/build/useTeamAddMemberDialog-BLn4nTuy.mjs +1 -0
- package/.output/server/chunks/build/useTeamAddMemberDialog-BLn4nTuy.mjs.map +1 -1
- package/.output/server/chunks/build/useTeamCreateDialog-Bp5qKtpI.mjs +1 -0
- package/.output/server/chunks/build/useTeamCreateDialog-Bp5qKtpI.mjs.map +1 -1
- package/.output/server/chunks/build/useTeamDeployDialog-DwIaz6Cx.mjs +1 -0
- package/.output/server/chunks/build/useTeamDeployDialog-DwIaz6Cx.mjs.map +1 -1
- package/.output/server/chunks/build/useTeamDialogState-CFRUQxAf.mjs +1 -0
- package/.output/server/chunks/build/useTeamDialogState-CFRUQxAf.mjs.map +1 -1
- package/.output/server/chunks/build/useTeamPluginDialog-B932gZOI.mjs +1 -0
- package/.output/server/chunks/build/useTeamPluginDialog-B932gZOI.mjs.map +1 -1
- package/.output/server/chunks/build/useTeamsCatalog-DBwaLQBw.mjs +1 -0
- package/.output/server/chunks/build/useTeamsCatalog-DBwaLQBw.mjs.map +1 -1
- package/.output/server/chunks/build/useTokenClipboard-CwQpoFeP.mjs +1 -0
- package/.output/server/chunks/build/useTokenClipboard-CwQpoFeP.mjs.map +1 -1
- package/.output/server/chunks/build/useTokenCreate-Ctl0YGhL.mjs +1 -0
- package/.output/server/chunks/build/useTokenCreate-Ctl0YGhL.mjs.map +1 -1
- package/.output/server/chunks/build/useTokenRename-Cm3ypSfN.mjs +1 -0
- package/.output/server/chunks/build/useTokenRename-Cm3ypSfN.mjs.map +1 -1
- package/.output/server/chunks/build/useTokenReveal-CeoWL5Mt.mjs +1 -0
- package/.output/server/chunks/build/useTokenReveal-CeoWL5Mt.mjs.map +1 -1
- package/.output/server/chunks/build/useTokensList-CNIzON3u.mjs +1 -0
- package/.output/server/chunks/build/useTokensList-CNIzON3u.mjs.map +1 -1
- package/.output/server/chunks/build/useWorkbenchAuth-CY-bVFMu.mjs +1 -0
- package/.output/server/chunks/build/useWorkbenchAuth-CY-bVFMu.mjs.map +1 -1
- package/.output/server/chunks/build/useWorkbenchWorkspaces-DhZQFss9.mjs +1 -0
- package/.output/server/chunks/build/useWorkbenchWorkspaces-DhZQFss9.mjs.map +1 -1
- package/.output/server/chunks/build/useWorkspaceAuth-Dlvj9csD.mjs +1 -0
- package/.output/server/chunks/build/useWorkspaceAuth-Dlvj9csD.mjs.map +1 -1
- package/.output/server/chunks/build/useWorkspaceChannels-CPFepxTN.mjs +1 -0
- package/.output/server/chunks/build/useWorkspaceChannels-CPFepxTN.mjs.map +1 -1
- package/.output/server/chunks/build/useWorkspacePanels-CTwREmq0.mjs +1 -0
- package/.output/server/chunks/build/useWorkspacePanels-CTwREmq0.mjs.map +1 -1
- package/.output/server/chunks/build/useWorkspaceShell-BCypjjjE.mjs +1 -0
- package/.output/server/chunks/build/useWorkspaceShell-BCypjjjE.mjs.map +1 -1
- package/.output/server/chunks/build/users-BWw0VCr9.mjs +1 -0
- package/.output/server/chunks/build/users-BWw0VCr9.mjs.map +1 -1
- package/.output/server/chunks/build/workshop-1gKeDASV.mjs +1 -0
- package/.output/server/chunks/build/workshop-1gKeDASV.mjs.map +1 -1
- package/.output/server/chunks/routes/api/health.get.mjs +1 -0
- package/.output/server/chunks/routes/api/health.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.get.mjs +1 -0
- package/.output/server/chunks/routes/api/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.post.mjs +1 -0
- package/.output/server/chunks/routes/api/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/mcp/workshop.mjs +32 -9
- package/.output/server/chunks/routes/api/mcp/workshop.mjs.map +1 -1
- package/.output/server/chunks/routes/api/metrics.mjs +1 -0
- package/.output/server/chunks/routes/api/metrics.mjs.map +1 -1
- package/.output/server/chunks/routes/api/plugins/_name/_...path_.mjs +1 -0
- package/.output/server/chunks/routes/api/plugins/_name/_...path_.mjs.map +1 -1
- package/.output/server/chunks/routes/api/plugins/client/_name_.get.mjs +1 -0
- package/.output/server/chunks/routes/api/plugins/client/_name_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/plugins/i18n.get.mjs +1 -0
- package/.output/server/chunks/routes/api/plugins/i18n.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/plugins/manifest.get.mjs +1 -0
- package/.output/server/chunks/routes/api/plugins/manifest.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/backup/list.get.mjs +1 -0
- package/.output/server/chunks/routes/api/system/backup/list.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/backup/run.post.mjs +3 -2
- package/.output/server/chunks/routes/api/system/backup/run.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/config-groups/_id_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/system/config-groups/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/config-groups/_id_.patch.mjs +1 -0
- package/.output/server/chunks/routes/api/system/config-groups/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/config.get.mjs +1 -0
- package/.output/server/chunks/routes/api/system/config.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/index.get.mjs +1 -0
- package/.output/server/chunks/routes/api/system/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/index.patch.mjs +1 -0
- package/.output/server/chunks/routes/api/system/index.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/index.post.mjs +1 -0
- package/.output/server/chunks/routes/api/system/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/index2.get.mjs +1 -0
- package/.output/server/chunks/routes/api/system/index2.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/monitor/terminal/ws.mjs +1 -0
- package/.output/server/chunks/routes/api/system/monitor/terminal/ws.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/monitor/terminate.post.mjs +1 -0
- package/.output/server/chunks/routes/api/system/monitor/terminate.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/monitor.get.mjs +1 -0
- package/.output/server/chunks/routes/api/system/monitor.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/settings/events.get.mjs +1 -0
- package/.output/server/chunks/routes/api/system/settings/events.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/settings/reset.post.mjs +1 -0
- package/.output/server/chunks/routes/api/system/settings/reset.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/timezone.get.mjs +1 -0
- package/.output/server/chunks/routes/api/system/timezone.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/_id_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/users/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/_id_.get.mjs +1 -0
- package/.output/server/chunks/routes/api/users/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/_id_.put.mjs +1 -0
- package/.output/server/chunks/routes/api/users/_id_.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/change-password.post.mjs +1 -0
- package/.output/server/chunks/routes/api/users/change-password.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/index.get.mjs +1 -0
- package/.output/server/chunks/routes/api/users/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/index.post.mjs +1 -0
- package/.output/server/chunks/routes/api/users/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/login.post.mjs +1 -0
- package/.output/server/chunks/routes/api/users/login.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/logout.post.mjs +1 -0
- package/.output/server/chunks/routes/api/users/logout.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/me.get.mjs +1 -0
- package/.output/server/chunks/routes/api/users/me.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/register.post.mjs +1 -0
- package/.output/server/chunks/routes/api/users/register.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/setup-status.get.mjs +1 -0
- package/.output/server/chunks/routes/api/users/setup-status.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/tokens/_id/token.get.mjs +1 -0
- package/.output/server/chunks/routes/api/users/tokens/_id/token.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/tokens/_id_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/users/tokens/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/tokens/_id_.patch.mjs +1 -0
- package/.output/server/chunks/routes/api/users/tokens/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/_...path_.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/_...path_.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/a2a/send.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/a2a/send.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/approvals/_id/decide.post.mjs +47 -3
- package/.output/server/chunks/routes/api/workshop/agent-tools/approvals/_id/decide.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.patch.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/grant.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/grant.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/revoke.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/revoke.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/index.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/index.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/index2.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/index2.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/invoke.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/invoke.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/list.get.mjs +51 -15
- package/.output/server/chunks/routes/api/workshop/agent-tools/list.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/agents/_id_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/agents/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/agents/_id_.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/agents/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/agents/_id_.patch.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/agents/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/agents/subscribe.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/agents/subscribe.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/datasets/_id/preview.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/datasets/_id/preview.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.patch.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/entities/prune.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/aml/entities/prune.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/env/recheck.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/env/recheck.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/env/uv.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/env/uv.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/env/venv.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/env/venv.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/index.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/index.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/index2.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/aml/index2.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/index2.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/index2.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/index3.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/index3.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/index3.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/index3.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/index4.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/index4.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/index5.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/index5.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/index6.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/index6.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/index7.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/index7.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/cancel.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/cancel.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/logs.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/logs.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/retry.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/retry.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/jobs/_id_.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/jobs/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/jobs/_id_.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/jobs/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/models/_id/predict.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/models/_id/predict.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/models/_id/promote.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/models/_id/promote.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/models/_id_.delete.mjs +3 -1
- package/.output/server/chunks/routes/api/workshop/aml/models/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/models/_id_.patch.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/models/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id/train.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id/train.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id_.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id_.patch.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/twin/providers.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/twin/providers.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/analysis/_id_.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/analysis/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/analysis/_id_.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/analysis/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/analysis/_id_.patch.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/analysis/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/approvals/_id/decide.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/approvals/_id/decide.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/assets/character/_id_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/assets/character/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/assets/devices/_id_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/assets/devices/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/assets/index.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/assets/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/assets/index.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/assets/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/assets/index2.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/assets/index2.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/assets/index2.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/assets/index2.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/audit.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/audit.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/caller.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/caller.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channel-templates/_id/instantiate.post.mjs +3 -2
- package/.output/server/chunks/routes/api/workshop/channel-templates/_id/instantiate.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.patch.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channel-templates/from-channel.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channel-templates/from-channel.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/activate.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/activate.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/_memoryId_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/_memoryId_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/search.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/search.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/model.patch.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/model.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/position.patch.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/position.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/range.patch.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/range.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/rotate-token.post.mjs +57 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/rotate-token.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/stop.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/stop.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.patch.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/chat/index.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/chat/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/chat/index.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/chat/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/chat/messages/_messageId/read.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/chat/messages/_messageId/read.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/chat/permissions.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/chat/permissions.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/events.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/events.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index.put.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index2.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/index2.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index2.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/index2.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index2.put.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index2.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index3.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/index3.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index3.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index3.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index4.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/index4.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index4.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index4.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index5.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index5.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index6.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/index6.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index7.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/index7.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/line.put.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/line.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/members/_userId/approve.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/members/_userId/approve.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/members/_userId_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/members/_userId_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/members/join.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/members/join.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/members/leave.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/members/leave.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/memories/_memoryId_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/memories/_memoryId_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/queue.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/queue.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/terminals.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/terminals.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/tools/reset.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/tools/reset.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/twin-profile.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/twin-profile.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/twin-profile.patch.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/twin-profile.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/index.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/channels/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/index.patch.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/index.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels.post.mjs +8 -7
- package/.output/server/chunks/routes/api/workshop/channels.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id/bind.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id/bind.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id/bindings.put.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id/bindings.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id/frames/content.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id/frames/content.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id/frames.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id/frames.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id/ingest.post.mjs +58 -10
- package/.output/server/chunks/routes/api/workshop/daq/_id/ingest.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id/samples.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id/samples.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id/test.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id/test.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id_.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id_.patch.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/alarms/_id/ack.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/daq/alarms/_id/ack.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/alarms.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/daq/alarms.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/controller.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/daq/controller.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/export/_id_.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/daq/export/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/export-file.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/daq/export-file.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/index.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/daq/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/index.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/daq/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/index2.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/daq/index2.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/infra/reconnect.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/daq/infra/reconnect.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/infra.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/daq/infra.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/query.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/daq/query.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.patch.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/test-driver.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/daq/test-driver.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id/bind.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id/bind.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id/bindings.put.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id/bindings.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id/param-ledger.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id/param-ledger.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id/read.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id/read.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id/test.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id/test.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id/write.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id/write.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id_.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id_.patch.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/controller.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/controller.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index2.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index2.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index2.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index2.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index3.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index3.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index3.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index3.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index4.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index4.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index4.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index4.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index5.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index5.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index5.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index5.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index6.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index6.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index7.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index7.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/journal/node/_nodeId/rollback.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/journal/node/_nodeId/rollback.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/line/query.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/line/query.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/start.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/start.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/stop.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/stop.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.patch.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/mes-artifacts/file.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/mes-artifacts/file.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/mes-hook-test.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/mes-hook-test.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/mes-test-read.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/mes-test-read.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/judge.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/judge.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/rollback.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/rollback.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/series.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/series.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id_.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id/read.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id/read.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id/write.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id/write.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.patch.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.patch.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/apply.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/apply.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/mark-good.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/mark-good.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/revert.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/revert.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/rollback-good.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/rollback-good.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/versions.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/versions.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/index.patch.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/index.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/close.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/close.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/data.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/data.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/rollback.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/rollback.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.patch.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/test-driver.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/test-driver.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/device-twins/_id/control.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/device-twins/_id/control.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/device-twins/_id/telemetry.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/device-twins/_id/telemetry.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/device-twins/_id_.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/device-twins/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/device-twins/_id_.patch.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/device-twins/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/charts/_id_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/eda/charts/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/charts/_id_.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/eda/charts/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/charts/_id_.patch.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/eda/charts/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/commonality.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/eda/commonality.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/dashboards/_id_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/eda/dashboards/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/dashboards/_id_.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/eda/dashboards/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/dashboards/_id_.patch.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/eda/dashboards/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/features/jobs.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/eda/features/jobs.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/features/run.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/eda/features/run.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/golden/_id_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/eda/golden/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/golden/deviation.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/eda/golden/deviation.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/golden/single.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/eda/golden/single.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/index.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/eda/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/index.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/eda/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/index2.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/eda/index2.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/index2.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/eda/index2.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/index3.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/eda/index3.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/index3.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/eda/index3.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/index4.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/eda/index4.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/index4.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/eda/index4.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/index5.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/eda/index5.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/index5.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/eda/index5.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/index6.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/eda/index6.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/index6.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/eda/index6.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/index7.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/eda/index7.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/index7.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/eda/index7.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/ocap/_id_.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/eda/ocap/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/ocap/_id_.patch.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/eda/ocap/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/runs/_id/labels.patch.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/eda/runs/_id/labels.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/runs.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/eda/runs.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/spc/_id/recompute.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/eda/spc/_id/recompute.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/spc/_id_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/eda/spc/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/spc/_id_.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/eda/spc/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/vm/predict.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/eda/vm/predict.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/exp/confirmations/_id/decide.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/exp/confirmations/_id/decide.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/exp/index.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/exp/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/fs/dirs.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/fs/dirs.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/harnesses/_id/providers.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/harnesses/_id/providers.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/harnesses.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/harnesses.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/hitl/pending.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/hitl/pending.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/hitl/respond.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/hitl/respond.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/index.get.mjs.map +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.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index.put.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/index.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index10.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/index10.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index11.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/index11.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index12.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/index12.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index13.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/index13.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index14.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/index14.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index15.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/index15.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index16.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/index16.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index2.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/index2.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index2.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/index2.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index3.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/index3.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index3.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/index3.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index4.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/index4.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index4.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/index4.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index5.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/index5.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index5.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/index5.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index6.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/index6.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index6.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/index6.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index7.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/index7.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index7.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/index7.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index8.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/index8.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index8.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/index8.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index9.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/index9.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index9.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/index9.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/mailbox/all.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/mailbox/all.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/mailbox.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/mailbox.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/memories/maintenance.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/memories/maintenance.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/mes/datasets.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/mes/datasets.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/mes/points.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/mes/points.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/mes/preview.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/mes/preview.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/notifications/read.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/notifications/read.post.mjs.map +1 -1
- 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/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 +36 -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/bindings/_id_.delete.mjs +35 -0
- package/.output/server/chunks/routes/api/workshop/optimization/bindings/_id_.delete.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/optimization/capabilities.get.mjs +38 -0
- package/.output/server/chunks/routes/api/workshop/optimization/capabilities.get.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/optimization/index.get.mjs +58 -0
- package/.output/server/chunks/routes/api/workshop/optimization/index.get.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/optimization/index.mjs +66 -0
- package/.output/server/chunks/routes/api/workshop/optimization/index.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/optimization/index2.mjs +60 -0
- package/.output/server/chunks/routes/api/workshop/optimization/index2.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/optimization/profiles/_id/publish.post.mjs +61 -0
- package/.output/server/chunks/routes/api/workshop/optimization/profiles/_id/publish.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/optimization/recommendations/_id/crosscheck.post.mjs +52 -0
- package/.output/server/chunks/routes/api/workshop/optimization/recommendations/_id/crosscheck.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/optimization/recommendations/_id/dispatch.post.mjs +52 -0
- package/.output/server/chunks/routes/api/workshop/optimization/recommendations/_id/dispatch.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/optimization/solve.post.mjs +41 -0
- package/.output/server/chunks/routes/api/workshop/optimization/solve.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/plugins/_name/disable.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/plugins/_name/disable.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/plugins/_name/enable.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/plugins/_name/enable.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/plugins/index.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/plugins/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/process-model/datasets.post.mjs +167 -0
- package/.output/server/chunks/routes/api/workshop/process-model/datasets.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/process-model/eligibility.mjs +122 -0
- package/.output/server/chunks/routes/api/workshop/process-model/eligibility.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/process-model/experiments.mjs +119 -0
- package/.output/server/chunks/routes/api/workshop/process-model/experiments.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/process-model/index.mjs +55 -0
- package/.output/server/chunks/routes/api/workshop/process-model/index.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/process-model/specs/_id/publish.post.mjs +48 -0
- package/.output/server/chunks/routes/api/workshop/process-model/specs/_id/publish.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/process-model/train.post.mjs +58 -0
- package/.output/server/chunks/routes/api/workshop/process-model/train.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/runtime.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/runtime.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.put.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/scene/layouts.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/scene/layouts.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/schedules/_id/run.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/schedules/_id/run.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/schedules/_id/runs.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/schedules/_id/runs.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/schedules/_id_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/schedules/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/schedules/_id_.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/schedules/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/schedules/_id_.patch.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/schedules/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id/complete.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/tasks/_id/complete.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id/dispatch.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/tasks/_id/dispatch.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id/index.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/tasks/_id/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id/reassign.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/tasks/_id/reassign.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id/reopen.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/tasks/_id/reopen.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id/report.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/tasks/_id/report.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id/retry.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/tasks/_id/retry.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id/update.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/tasks/_id/update.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id_.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/tasks/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/tasks.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id/deploy.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id/deploy.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id/index.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/teams/_id/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id/index.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/teams/_id/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id/index.put.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id/index.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id/index2.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id/index2.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id/members/_agentId_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/teams/_id/members/_agentId_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/teams/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id_.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/teams/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id_.patch.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/teams/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/tools/_name_.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/tools/_name_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/tools/sync.post.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/tools/sync.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/users/me.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/users/me.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/users/register.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/users/register.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/workspaces/_id/channel-templates/_tplId_.post.mjs +3 -2
- package/.output/server/chunks/routes/api/workshop/workspaces/_id/channel-templates/_tplId_.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/workspaces/index.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/workspaces/index.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/renderer.mjs +2 -2
- package/.output/server/chunks/virtual/entry.mjs +455 -11
- package/.output/server/chunks/virtual/entry.mjs.map +1 -1
- package/.output/server/chunks/virtual/precomputed.mjs +1 -1
- package/.output/server/index.mjs +1 -0
- package/.output/server/index.mjs.map +1 -1
- package/.output/server/package.json +1 -1
- package/README-zh.md +38 -10
- package/README.md +37 -8
- package/app/components/AppSidebar.vue +2 -0
- package/app/components/AwChart.vue +21 -2
- package/app/components/data/DataMirrorPanel.vue +1 -1
- package/app/composables/workshop/event-blocks/constants.ts +99 -94
- package/app/composables/workshop/operation-events.ts +1 -1
- package/app/composables/workshop/useWorkshopApi.ts +2 -1
- package/app/pages/ontology/api.ts +18 -0
- package/app/pages/ontology/index.vue +779 -0
- package/app/pages/ontology/types.ts +122 -0
- package/app/pages/optimizer/api.ts +21 -0
- package/app/pages/optimizer/index.vue +669 -0
- package/app/pages/studio/board.vue +18 -13
- package/app/pages/studio/index.vue +6 -33
- package/app/utils/chart-trend.ts +97 -0
- package/config.yml +14 -1
- package/docs/cli.en.md +4 -4
- package/docs/cli.md +4 -4
- 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 +159 -0
- package/i18n/locales/zh-CN.ts +159 -0
- package/mcp/aw-mcp-server.mjs +35 -1
- package/nuxt.config.ts +14 -0
- package/package.json +3 -1
- package/scripts/_audit/eda-ui-fix-acceptance.mjs +212 -0
- package/scripts/_i18n-verify-keys.mjs +52 -50
- package/scripts/acceptance-optimizer-process-model.mjs +9 -0
- package/scripts/acceptance-optimizer-process-model.ts +863 -0
- package/scripts/agent-binding-matrix-e2e.mjs +240 -0
- package/scripts/docs-shots.mjs +36 -0
- package/scripts/e2e-model-loop-live.mjs +731 -0
- package/scripts/e2e-ontology-live.mjs +774 -0
- package/scripts/e2e-ontology.mjs +328 -0
- package/scripts/e2e-optimizer-live.mjs +1342 -0
- package/scripts/e2e-optimizer-plc.mjs +222 -0
- package/scripts/e2e-optimizer-restart.mjs +125 -0
- package/scripts/e2e-plc-excite.mjs +75 -0
- package/scripts/e2e-simulator-optimizer.mjs +262 -0
- package/scripts/e2e-tool-surface-multiagent.mjs +353 -0
- package/scripts/idd-rag-aml-regression.mjs +348 -0
- package/scripts/idd-rag-aml-ui-demo.mjs +93 -0
- package/scripts/ontology-idd-rag-e2e.mjs +449 -0
- package/scripts/run-quality-gates.mjs +58 -0
- package/scripts/tool-references-migrate.ts +82 -0
- package/scripts/tool-registry-e2e.mjs +2 -2
- package/scripts/ui/optimizer-ui-playwright.py +152 -0
- package/scripts/ui/system-e2e-playwright.py +460 -0
- package/sdk/context.mjs +32 -4
- package/server/api/mcp/workshop.ts +37 -10
- package/server/api/workshop/agent-tools/approvals/[id]/decide.post.ts +140 -90
- package/server/api/workshop/agent-tools/list.get.ts +60 -15
- package/server/api/workshop/aml/models/[id].delete.ts +38 -35
- package/server/api/workshop/channels/[id]/agents/[agentId]/rotate-token.post.ts +45 -0
- package/server/api/workshop/daq/[id]/ingest.post.ts +192 -166
- 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]/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 +21 -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/api/workshop/optimization/bindings/[id].delete.ts +12 -0
- package/server/api/workshop/optimization/bindings/index.ts +47 -0
- package/server/api/workshop/optimization/capabilities.get.ts +19 -0
- package/server/api/workshop/optimization/profiles/[id]/publish.post.ts +41 -0
- package/server/api/workshop/optimization/profiles/index.ts +41 -0
- package/server/api/workshop/optimization/recommendations/[id]/crosscheck.post.ts +29 -0
- package/server/api/workshop/optimization/recommendations/[id]/dispatch.post.ts +33 -0
- package/server/api/workshop/optimization/runs/index.get.ts +41 -0
- package/server/api/workshop/optimization/solve.post.ts +23 -0
- package/server/api/workshop/process-model/datasets.post.ts +26 -0
- package/server/api/workshop/process-model/eligibility.ts +40 -0
- package/server/api/workshop/process-model/experiments.ts +43 -0
- package/server/api/workshop/process-model/specs/[id]/publish.post.ts +22 -0
- package/server/api/workshop/process-model/specs/index.ts +34 -0
- package/server/api/workshop/process-model/train.post.ts +36 -0
- package/server/harness/aw-mcp-bridge.mjs +24 -4
- package/server/harness/aw-mcp-signature.mjs +20 -0
- package/server/plugins/workshop.ts +20 -0
- package/server/plugins-builtin/rag-bridge/index.mjs +7 -8
- package/server/services/workshop/agents/adapters/omp-rpc-client/types.ts +121 -115
- package/server/services/workshop/agents/hitl-decision/dispatcher.ts +127 -96
- package/server/services/workshop/agents/host-tool-bridge/catalog.ts +19 -6
- package/server/services/workshop/agents/host-tool-bridge/description-budget.ts +34 -0
- package/server/services/workshop/agents/host-tool-bridge/dispatch.ts +83 -1
- package/server/services/workshop/agents/host-tool-bridge/optimizer-gate.ts +72 -0
- package/server/services/workshop/agents/host-tool-bridge/per-agent.ts +48 -13
- package/server/services/workshop/agents/host-tool-bridge/tools/industrial.ts +123 -101
- package/server/services/workshop/agents/industrial/grant-guard.ts +77 -0
- package/server/services/workshop/agents/industrial/index.ts +38 -32
- package/server/services/workshop/agents/industrial/line-tools.ts +8 -3
- package/server/services/workshop/agents/industrial/ontology-tools.ts +320 -0
- package/server/services/workshop/agents/industrial/optimizer-tools.ts +272 -0
- package/server/services/workshop/agents/industrial/resource-paging.ts +31 -0
- package/server/services/workshop/agents/industrial/resources-tools.ts +79 -0
- package/server/services/workshop/agents/industrial/tool-verify-legacy-specs.ts +73 -0
- package/server/services/workshop/agents/industrial/tool-verify.ts +416 -381
- package/server/services/workshop/agents/plugin-governance.ts +148 -0
- package/server/services/workshop/agents/plugin-tools.ts +11 -0
- package/server/services/workshop/agents/registry.ts +21 -1
- package/server/services/workshop/agents/tool-approvals.ts +7 -5
- package/server/services/workshop/agents/tool-reference-kinds.ts +2 -0
- package/server/services/workshop/agents/tool-reference-spec.ts +114 -0
- package/server/services/workshop/aml/aml.repo.ts +73 -18
- package/server/services/workshop/aml/dataset-builder.ts +195 -25
- package/server/services/workshop/aml/env-lease.ts +148 -0
- package/server/services/workshop/aml/env-manager.ts +6 -1
- package/server/services/workshop/aml/gates.ts +163 -121
- package/server/services/workshop/aml/job-orchestrator/stages.ts +36 -15
- package/server/services/workshop/aml/job-orchestrator/start-job.ts +44 -0
- package/server/services/workshop/aml/job-orchestrator/submit.ts +6 -0
- package/server/services/workshop/aml/model-references.ts +83 -0
- package/server/services/workshop/aml/model-registry.ts +183 -11
- package/server/services/workshop/aml/predictor.ts +147 -5
- package/server/services/workshop/aml/python/requirements.txt +3 -0
- package/server/services/workshop/aml/python-runtime.ts +39 -4
- package/server/services/workshop/aml/retention.ts +104 -98
- package/server/services/workshop/aml/twin/physics-spec.ts +6 -22
- package/server/services/workshop/aml/twin/provider-contracts.ts +45 -1
- package/server/services/workshop/aml/twin/provider-loader.ts +13 -4
- package/server/services/workshop/aml/twin/provider-registry.ts +145 -2
- package/server/services/workshop/daq/ingest-policy.ts +43 -0
- package/server/services/workshop/daq/storage/index.ts +6 -5
- package/server/services/workshop/daq/storage/sqlite.adapter.ts +95 -24
- package/server/services/workshop/daq/storage/timescale.adapter.ts +34 -11
- package/server/services/workshop/daq/storage/tsdb-port.ts +36 -0
- package/server/services/workshop/db/channel-agent.repo.ts +58 -3
- package/server/services/workshop/db/database/migrations.ts +75 -0
- package/server/services/workshop/db/database/open.ts +9 -1
- package/server/services/workshop/db/database/schema.ts +356 -2
- package/server/services/workshop/db/retention.ts +9 -0
- package/server/services/workshop/db/tool-registry.repo.ts +5 -1
- package/server/services/workshop/dcw/dcw-controller/lines.ts +11 -0
- package/server/services/workshop/dcw/dcw-controller/recipes.ts +27 -0
- package/server/services/workshop/dcw/dcw-line.repo.ts +3 -0
- package/server/services/workshop/dcw/dcw-recipe.repo.ts +4 -2
- package/server/services/workshop/dcw/line-run.ts +2 -0
- package/server/services/workshop/eda/eda-run.repo.ts +8 -5
- package/server/services/workshop/ontology/compiler.ts +474 -0
- package/server/services/workshop/ontology/contracts.ts +441 -0
- package/server/services/workshop/ontology/guards.ts +139 -0
- package/server/services/workshop/ontology/index.ts +10 -0
- package/server/services/workshop/ontology/ontology.service.ts +892 -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/validator.ts +218 -0
- package/server/services/workshop/optimization/access.ts +210 -0
- package/server/services/workshop/optimization/binding.repo.ts +135 -0
- package/server/services/workshop/optimization/binding.service.ts +128 -0
- package/server/services/workshop/optimization/contracts.ts +360 -0
- package/server/services/workshop/optimization/crosscheck.service.ts +351 -0
- package/server/services/workshop/optimization/dispatch.service.ts +462 -0
- package/server/services/workshop/optimization/manager.ts +315 -0
- package/server/services/workshop/optimization/problem-builder.ts +359 -0
- package/server/services/workshop/optimization/profile-adopt.service.ts +256 -0
- package/server/services/workshop/optimization/profile.repo.ts +174 -0
- package/server/services/workshop/optimization/python/.mimosa/hook-state/session_187ec97f45d4bd02369bbe94da527cf1.json +1 -0
- package/server/services/workshop/optimization/python/.mimosa/hook-state/session_187ec97f45d4bd02369bbe94da527cf1.mvjqkcs6-68688-fb7131a89c.baseline/190a6772a4e43801737b4ba6072eb9d53d3099b5d8a9e6f57bc5e8592a26a6c4.source +274 -0
- package/server/services/workshop/optimization/python/.mimosa/hook-status/session_187ec97f45d4bd02369bbe94da527cf1-01ed7f04fa.json +14 -0
- package/server/services/workshop/optimization/python/__pycache__/problems.cpython-312.pyc +0 -0
- package/server/services/workshop/optimization/python/probe.py +24 -0
- package/server/services/workshop/optimization/python/problems.py +347 -0
- package/server/services/workshop/optimization/python/worker.py +119 -0
- package/server/services/workshop/optimization/recommendation.service.ts +100 -0
- package/server/services/workshop/optimization/rest-auth.ts +61 -0
- package/server/services/workshop/optimization/run.repo.ts +158 -0
- package/server/services/workshop/optimization/templates.ts +3 -0
- package/server/services/workshop/optimization/uq-evidence.ts +144 -0
- package/server/services/workshop/optimization/worker-client.ts +358 -0
- package/server/services/workshop/process-model/artifact-validation.ts +19 -0
- package/server/services/workshop/process-model/conditions.ts +43 -0
- package/server/services/workshop/process-model/context-segments.repo.ts +100 -0
- package/server/services/workshop/process-model/context.ts +202 -0
- package/server/services/workshop/process-model/contracts.ts +344 -0
- package/server/services/workshop/process-model/dataset.ts +144 -0
- package/server/services/workshop/process-model/eligibility-service.ts +83 -0
- package/server/services/workshop/process-model/eligibility.ts +305 -0
- package/server/services/workshop/process-model/experiment.ts +100 -0
- package/server/services/workshop/process-model/spec.repo.ts +127 -0
- package/server/services/workshop/process-model/spec.ts +302 -0
- package/server/services/workshop/process-model/trainers/dataset-reader.ts +80 -0
- package/server/services/workshop/process-model/trainers/index.ts +150 -0
- package/server/services/workshop/process-model/trainers/linear-arx.ts +325 -0
- package/server/services/workshop/process-model/trainers/static-response.ts +211 -0
- package/server/services/workshop/process-model/watermark.ts +18 -0
- package/server/services/workshop/prompts/loader.ts +7 -0
- package/server/services/workshop/runtime/manager/admin-channel.ts +14 -1
- package/server/services/workshop/runtime/manager/host-tools.ts +65 -8
- package/server/services/workshop/runtime/manager/types.ts +2 -2
- package/server/services/workshop/settings.ts +33 -0
- package/server/services/workshop/tools/catalog-view.ts +4 -1
- package/server/services/workshop/tools/policy.ts +60 -10
- package/server/services/workshop/tools/registry.ts +42 -1
- package/shared/config/schema.json +14 -5
- package/shared/dcw-protocol/line.ts +9 -0
- package/shared/dcw-protocol/recipe.ts +2 -0
- package/shared/dimensions.ts +124 -0
- package/shared/units.ts +50 -0
- package/.output/public/_nuxt/B1OMZaQh.js +0 -1
- package/.output/public/_nuxt/BNNtKbSV.js +0 -14
- package/.output/public/_nuxt/BYLc8cfE.js +0 -1
- package/.output/public/_nuxt/Bq9DDqiq2.js +0 -1
- package/.output/public/_nuxt/C1vvxGo02.js +0 -1
- package/.output/public/_nuxt/SF0I6Hzp2.js +0 -36
- package/.output/public/_nuxt/board.jjp4MSZR.css +0 -1
- package/.output/public/_nuxt/builds/meta/cd7ec308-625f-4eb8-a841-11f3127fbf66.json +0 -1
- package/.output/public/_nuxt/studio.DiCFYeMk.css +0 -1
- package/.output/public/_nuxt/w5BEz70W.js +0 -1
- package/.output/server/chunks/build/board-C6JysYLg.mjs.map +0 -1
- package/.output/server/chunks/build/data-DL68QJ5W.mjs.map +0 -1
- package/.output/server/chunks/build/studio-DjhjwH4s.mjs.map +0 -1
- /package/.output/public/_nuxt/{2KE8xGVm2.js → 2KE8xGVm.js} +0 -0
- /package/.output/public/_nuxt/{62J4vljm2.js → 62J4vljm.js} +0 -0
- /package/.output/public/_nuxt/{B8cViLJT2.js → B8cViLJT.js} +0 -0
- /package/.output/public/_nuxt/{C-MY-JQE2.js → C-MY-JQE.js} +0 -0
- /package/.output/public/_nuxt/{D5kCimyw.js → D5kCimyw2.js} +0 -0
- /package/.output/public/_nuxt/{DF32f5EL.js → DF32f5EL2.js} +0 -0
- /package/.output/public/_nuxt/{DGrrucbG2.js → DGrrucbG.js} +0 -0
- /package/.output/public/_nuxt/{TOWR4WpO2.js → TOWR4WpO.js} +0 -0
- /package/.output/public/_nuxt/{Y4sMSPrS.js → Y4sMSPrS2.js} +0 -0
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/* eslint-disable @stylistic/max-statements-per-line */
|
|
3
|
+
/**
|
|
4
|
+
* Physical PLC smoke and optional collected-data training against an isolated AW home.
|
|
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.mjs
|
|
9
|
+
* Defaults to six 100 s, 1 Hz runs when DAQ infrastructure is healthy (2/2/2 split).
|
|
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-23-optimizer-physical', 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 physical 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`, 'Physical 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
|
+
const initial = label === 'film' ? 140 : 710
|
|
118
|
+
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')
|
|
119
|
+
const state = { label, key, line, product, control, initial, mv, cv, daq: [], runs: [] }
|
|
120
|
+
scenes.push(state)
|
|
121
|
+
// One exposed scalar for each available protocol; include both training channels.
|
|
122
|
+
const selected = [mv, cv]
|
|
123
|
+
for (const driver of ['modbus-tcp', 'modbus-rtu', 'opcua', 'mqtt', 'http']) {
|
|
124
|
+
if (selected.some(item => item.driver === driver)) continue
|
|
125
|
+
const item = exported.find(item => item.driver === driver && !item.format && !(item.driverConfig?.jsonKey))
|
|
126
|
+
if (item) selected.push(item)
|
|
127
|
+
}
|
|
128
|
+
for (const [i, item] of selected.entries()) {
|
|
129
|
+
const probe = await aw('POST', '/api/workshop/daq/test-driver', { driver: item.driver, driverConfig: item.driverConfig })
|
|
130
|
+
check(`${label}.probe.${i}`, `Real ${item.driver} DAQ driver reads exposed ${item.signal}`, probe.status === 200 && probe.data?.test?.ok === true, probe.data?.test || error(probe))
|
|
131
|
+
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')
|
|
132
|
+
state.daq.push({ ...node, export: item })
|
|
133
|
+
}
|
|
134
|
+
const written = await aw('POST', `/api/workshop/dcw/${control.id}/write`, { value: initial + 5 })
|
|
135
|
+
check(`${label}.write`, 'Application DCW writes through real PLC protocol', written.status === 200 && written.data?.outcome?.ok === true, written.data?.outcome || error(written))
|
|
136
|
+
const readback = await aw('POST', '/api/workshop/daq/test-driver', { driver: mv.driver, driverConfig: mv.driverConfig })
|
|
137
|
+
const probeValue = Number(readback.data?.test?.value ?? readback.data?.test?.preview?.value)
|
|
138
|
+
// Dedicated simulator node is the independent exposed readback when test-driver response omits value.
|
|
139
|
+
const simNode = (await sim('GET', '/api/nodes')).data?.find(node => node.id === mv.deviceId)
|
|
140
|
+
const signal = simNode?.signals?.find(item => item.name === mvName)
|
|
141
|
+
const observed = Number(signal?.value ?? signal?.runtime?.value ?? probeValue)
|
|
142
|
+
check(`${label}.readback`, 'Exposed PLC setpoint equals application write', Math.abs(observed - initial - 5) <= 0.01, { expected: initial + 5, observed })
|
|
143
|
+
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')
|
|
144
|
+
return state
|
|
145
|
+
}
|
|
146
|
+
function specOf(scene) {
|
|
147
|
+
return {
|
|
148
|
+
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,
|
|
149
|
+
conditions: [{ id: 'physical', match: [{ field: 'recipeId', op: 'eq', value: scene.recipe.id }] }],
|
|
150
|
+
variables: [
|
|
151
|
+
{ 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 },
|
|
152
|
+
{ 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 },
|
|
153
|
+
],
|
|
154
|
+
timing: { beatMs: 1000, historySteps: 8, horizonSteps: 4, fixedDt: true },
|
|
155
|
+
trainer: { ref: 'linear_arx@1', config: { arOrder: 1, inputOrder: 1, ridgeLambda: 1e-4, standardize: true } },
|
|
156
|
+
datasetPolicy: { split: { valRatio: 0.4, testRatio: 0.4, seed: 42 }, cleaning: { hampelK: 0, maxInterpMs: 1000 } },
|
|
157
|
+
gatePolicyRef: 'process-model.gates@1', modelInterface: { id: 'linear_state_space', version: 1, inputSemantics: 'setpoint', mode: 'state_space' },
|
|
158
|
+
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',
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
async function startRun(scene) {
|
|
162
|
+
const started = await aw('POST', `/api/workshop/dcw/lines/${scene.line.id}/start`, { recipeId: scene.recipe.id })
|
|
163
|
+
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))
|
|
164
|
+
if (started.data?.run?.id) scene.runs.push(started.data.run.id)
|
|
165
|
+
}
|
|
166
|
+
async function trainAndSolve(scene) {
|
|
167
|
+
const spec = specOf(scene)
|
|
168
|
+
const registered = await aw('POST', '/api/workshop/process-model/specs', spec)
|
|
169
|
+
check(`${scene.label}.spec`, 'Physical scene configurable ProcessModelSpec accepted', registered.status === 200, error(registered))
|
|
170
|
+
await aw('POST', `/api/workshop/process-model/specs/${spec.id}/publish?version=1`)
|
|
171
|
+
const built = await aw('POST', '/api/workshop/process-model/datasets', spec)
|
|
172
|
+
if (built.status !== 200) { record(`${scene.label}.dataset`, 'Physical collected-data dataset/train/solve', 'blocked', error(built)); return }
|
|
173
|
+
check(`${scene.label}.dataset`, 'Dataset built exclusively from actual collector data', built.data?.rowCount >= 1 && built.data?.lineageVerified === 1, built.data)
|
|
174
|
+
const eligible = await aw('POST', '/api/workshop/process-model/eligibility', { specId: spec.id, specVersion: 1, datasetId: built.data.datasetId, scope: 'simulation' })
|
|
175
|
+
const report = eligible.data?.report
|
|
176
|
+
check(`${scene.label}.eligibility`, 'Physical intervention data eligibility evaluated', eligible.status === 200 && Boolean(report), report || error(eligible))
|
|
177
|
+
const submit = await aw('POST', '/api/workshop/process-model/train', { spec, datasetId: built.data.datasetId, modelName: `${TAG}-${scene.label}` })
|
|
178
|
+
let job = submit.data?.job
|
|
179
|
+
for (let i = 0; job?.id && !['done', 'failed', 'cancelled', 'timeout', 'interrupted'].includes(job.status) && i < 240; i++) {
|
|
180
|
+
await sleep(500)
|
|
181
|
+
job = (await aw('GET', `/api/workshop/aml/jobs/${job.id}`)).data?.job
|
|
182
|
+
}
|
|
183
|
+
if (!job?.modelId || report?.optimizationEligible !== true) { record(`${scene.label}.train`, 'Training, model gates and optimization eligibility', 'blocked', { job, report }); return }
|
|
184
|
+
check(`${scene.label}.train`, 'Physical collected-data training registers a model', job.status === 'done', { jobId: job.id, modelId: job.modelId })
|
|
185
|
+
const profileId = `${TAG}-${scene.label}-profile`
|
|
186
|
+
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' ? 15 : 710 } } } })
|
|
187
|
+
if (profile.status !== 200) { record(`${scene.label}.profile`, 'Physical model Profile creation', 'blocked', error(profile)); return }
|
|
188
|
+
const published = await aw('POST', `/api/workshop/optimization/profiles/${profileId}/publish?version=1`)
|
|
189
|
+
check(`${scene.label}.publish`, 'Physical model Profile publishes', published.status === 200, error(published))
|
|
190
|
+
const channel = (await aw('POST', '/api/workshop/channel-templates/chtpl-aml-optimization-default/instantiate', { name: `${TAG}-${scene.label}` })).data
|
|
191
|
+
const agentId = channel?.leadAgentId || channel?.agents?.find(agent => agent.role === 'lead')?.id
|
|
192
|
+
const workspace = (await aw('POST', '/api/workshop/workspaces', { name: `${TAG}-${scene.label}` })).data
|
|
193
|
+
await aw('POST', `/api/workshop/workspaces/${workspace.id}/channels/${channel.channelId}`)
|
|
194
|
+
const binding = await aw('POST', '/api/workshop/optimization/bindings', { workspaceId: workspace.id, channelId: channel.channelId, agentInstanceId: agentId, profileId, profileVersion: 1, mode: 'recommendation' })
|
|
195
|
+
check(`${scene.label}.binding`, 'Physical profile binds to actual Agent instance', binding.status === 200, error(binding))
|
|
196
|
+
await startRun(scene)
|
|
197
|
+
await sleep(12_000)
|
|
198
|
+
const result = await aw('POST', '/api/workshop/agent-tools/invoke', { agentId, tool: 'optimizer_solve', args: {} })
|
|
199
|
+
let candidate
|
|
200
|
+
try { candidate = JSON.parse(result.data?.result?.text || '{}') }
|
|
201
|
+
catch { /* recorded below */ }
|
|
202
|
+
check(`${scene.label}.solve`, 'Agent tool produces an optimal candidate from physical history', !result.data?.result?.isError && candidate?.status === 'optimal', candidate || result.data || error(result))
|
|
203
|
+
if (candidate?.status === 'optimal') {
|
|
204
|
+
const raw = candidate.firstMove?.mv
|
|
205
|
+
const engineered = candidate.firstMoveEngineering?.mv
|
|
206
|
+
check(`${scene.label}.raw-bounds`, 'Unmodified solver first move satisfies declared physical 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 })
|
|
207
|
+
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 })
|
|
208
|
+
}
|
|
209
|
+
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')
|
|
210
|
+
}
|
|
211
|
+
if (process.argv.includes('--simulator-only')) {
|
|
212
|
+
await bootSimulator()
|
|
213
|
+
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))
|
|
214
|
+
console.log(`Isolated simulator ready ${SIM}, root=${ROOT}`)
|
|
215
|
+
await new Promise(() => setInterval(() => {}, 60_000))
|
|
216
|
+
}
|
|
217
|
+
try {
|
|
218
|
+
await bootSimulator()
|
|
219
|
+
await loadScene('cast-film-physics', 'film', 'ScrewSpeedSP', 'MeltPressure', 'dev-extruder-opcua')
|
|
220
|
+
await loadScene('anneal-line', 'anneal', '均热区1炉温SP', 'FurnaceTemp', 'anneal-heating-mbtcp')
|
|
221
|
+
const daq = await aw('GET', '/api/workshop/daq')
|
|
222
|
+
check('infra.observed', 'DAQ infrastructure state is explicitly observed', daq.status === 200, { infra: daq.data?.infra, meta: daq.data?.meta })
|
|
223
|
+
const healthy = daq.data?.infra?.degraded === false
|
|
224
|
+
const seconds = Number(process.env.AW_PHYSICAL_COLLECT_SECONDS || (healthy ? 100 : 20))
|
|
225
|
+
const runs = healthy && seconds >= 60 ? Number(process.env.AW_PHYSICAL_RUNS || 6) : 1
|
|
226
|
+
for (let run = 0; run < runs; run++) {
|
|
227
|
+
for (const scene of scenes) await startRun(scene)
|
|
228
|
+
for (let elapsed = 0; elapsed < seconds; elapsed++) {
|
|
229
|
+
if (healthy && elapsed >= 60 && elapsed % 60 === 0) {
|
|
230
|
+
for (const scene of scenes) {
|
|
231
|
+
const value = scene.initial + (elapsed % 120 === 0 ? -20 : 25)
|
|
232
|
+
const changed = await aw('POST', `/api/workshop/dcw/${scene.control.id}/write`, { value })
|
|
233
|
+
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))
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
if (elapsed % 30 === 0) console.log(`COLLECT run=${run + 1}/${runs} elapsed=${elapsed}/${seconds}s healthy=${healthy}`)
|
|
237
|
+
await sleep(1000)
|
|
238
|
+
}
|
|
239
|
+
for (const scene of scenes) await aw('POST', `/api/workshop/dcw/lines/${scene.line.id}/stop`)
|
|
240
|
+
}
|
|
241
|
+
for (const scene of scenes) {
|
|
242
|
+
const samples = await aw('GET', `/api/workshop/daq/${scene.daq[1].id}/samples?bucketMs=1000&limit=1000`)
|
|
243
|
+
const points = samples.data?.points || []
|
|
244
|
+
const name = `${scene.label}.collection`
|
|
245
|
+
if (!points.length && !healthy) record(name, 'Physical samples persisted by actual app DAQ', 'blocked', { reason: 'DAQ infrastructure degraded: application disables online acquisition', infra: daq.data?.infra, points: points.length })
|
|
246
|
+
else check(name, 'Physical samples persisted by actual app DAQ', points.length > 5, { points: points.length, tail: points.slice(-2) })
|
|
247
|
+
await trainAndSolve(scene)
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
catch (err) { record('harness', 'Physical harness execution', 'fail', err instanceof Error ? err.stack : String(err)) }
|
|
251
|
+
finally {
|
|
252
|
+
for (const scene of scenes) {
|
|
253
|
+
await aw('POST', `/api/workshop/dcw/lines/${scene.line.id}/stop`).catch(() => {})
|
|
254
|
+
for (const node of scene.daq) await aw('PATCH', `/api/workshop/daq/${node.id}`, { enabled: false }).catch(() => {})
|
|
255
|
+
await aw('PATCH', `/api/workshop/dcw/${scene.control.id}`, { enabled: false }).catch(() => {})
|
|
256
|
+
}
|
|
257
|
+
simulator?.kill()
|
|
258
|
+
const counts = Object.fromEntries(['pass', 'fail', 'blocked', 'not-run'].map(status => [status, checks.filter(item => item.status === status).length]))
|
|
259
|
+
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))
|
|
260
|
+
console.log(JSON.stringify({ counts, report: join(EVID, 'report.json') }))
|
|
261
|
+
process.exitCode = counts.fail ? 1 : counts.blocked ? 2 : 0
|
|
262
|
+
}
|
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* 工具面元数据驱动 · 多 Agent 实机 E2E(2026-10-24,隔离实例,真实 HTTP + MCP stdio)
|
|
4
|
+
*
|
|
5
|
+
* 验证用户核心关切:
|
|
6
|
+
* - 同一频道内不同 Agent(仅绑定不同)拿到不同工具描述(同一份 host-tools.json 动态装配);
|
|
7
|
+
* - 执行期 verify 按绑定面裁剪:自己的节点放行、跨线节点拒绝(原生 invoke 与 MCP 桥同源);
|
|
8
|
+
* - 配方写面:绑定配方的 Agent 进入 HITL 审批;未绑定者被 recipe 门直接拒绝;
|
|
9
|
+
* - WP2:ingest 兜底路径要求产线 operate 权限(普通用户 403,admin 200);回填窗 ±1h;
|
|
10
|
+
* - WP3:rotate-token 后旧 token 宽限内可用、新 token 立即可用;列表只回 tokenTail;
|
|
11
|
+
* - WP6:/agent-tools/list 带 ETag,If-None-Match 命中 304;industrial_resources 分页可用;
|
|
12
|
+
* - 面 B(stdio 桥)= 权威 per-agent 面:tools/list 描述按 Agent 差异化,tools/call 同链治理。
|
|
13
|
+
*
|
|
14
|
+
* 运行:node scripts/e2e-tool-surface-multiagent.mjs
|
|
15
|
+
*/
|
|
16
|
+
import { spawn, spawnSync } from 'node:child_process'
|
|
17
|
+
import { mkdirSync, openSync, writeFileSync } from 'node:fs'
|
|
18
|
+
import { dirname, join, resolve } from 'node:path'
|
|
19
|
+
import { fileURLToPath } from 'node:url'
|
|
20
|
+
import { tmpdir } from 'node:os'
|
|
21
|
+
import { DatabaseSync } from 'node:sqlite'
|
|
22
|
+
import { createInterface } from 'node:readline'
|
|
23
|
+
|
|
24
|
+
const REPO = resolve(dirname(fileURLToPath(import.meta.url)), '..')
|
|
25
|
+
const TAG = `ts${Date.now().toString(36).slice(-4)}`
|
|
26
|
+
const ROOT = join(tmpdir(), `aw-tool-surface-e2e-${TAG}`)
|
|
27
|
+
mkdirSync(join(ROOT, 'home'), { recursive: true })
|
|
28
|
+
// 审批超时 1.5s:让「进入 HITL」可判定(未获批准路径),无需人工交互
|
|
29
|
+
writeFileSync(join(ROOT, 'home', 'runtime-settings.json'), JSON.stringify({ version: 1, overrides: { 'security.hitl_timeout_ms': 1500 } }))
|
|
30
|
+
const results = []
|
|
31
|
+
const ok = (id, name, cond, detail = '') => {
|
|
32
|
+
results.push({ id, name, pass: Boolean(cond), detail: String(detail).slice(0, 400) })
|
|
33
|
+
console.log(`${cond ? '✔' : '✖'} [${id}] ${name}${cond ? '' : ` — ${String(detail).slice(0, 400)}`}`)
|
|
34
|
+
}
|
|
35
|
+
const sleep = ms => new Promise(r => setTimeout(r, ms))
|
|
36
|
+
|
|
37
|
+
let port = 0
|
|
38
|
+
for (const p of [3993, 3992, 3991, 3990]) {
|
|
39
|
+
try {
|
|
40
|
+
const r = await fetch(`http://127.0.0.1:${p}/api/health`, { signal: AbortSignal.timeout(1200) })
|
|
41
|
+
if (r.ok) continue
|
|
42
|
+
}
|
|
43
|
+
catch { /* 空闲 */ }
|
|
44
|
+
port = p
|
|
45
|
+
break
|
|
46
|
+
}
|
|
47
|
+
if (!port) {
|
|
48
|
+
console.error('无空闲端口')
|
|
49
|
+
process.exit(1)
|
|
50
|
+
}
|
|
51
|
+
const BASE = `http://127.0.0.1:${port}`
|
|
52
|
+
process.env.NO_PROXY = '127.0.0.1,localhost'
|
|
53
|
+
const logFd = openSync(join(ROOT, 'dev.log'), 'a')
|
|
54
|
+
const child = spawn(process.execPath, [join(REPO, 'bin', 'aw.mjs'), 'dev', '--port', String(port)], {
|
|
55
|
+
cwd: REPO,
|
|
56
|
+
env: {
|
|
57
|
+
...process.env,
|
|
58
|
+
AW_MODE: 'home',
|
|
59
|
+
AW_HOME: join(ROOT, 'home'),
|
|
60
|
+
AW_RATE_LIMIT_OFF: '1',
|
|
61
|
+
NUXT_SESSION_PASSWORD: 'ToolSurface#2026-e2e-key',
|
|
62
|
+
NO_PROXY: '127.0.0.1,localhost',
|
|
63
|
+
},
|
|
64
|
+
stdio: ['ignore', logFd, logFd],
|
|
65
|
+
windowsHide: true,
|
|
66
|
+
})
|
|
67
|
+
|
|
68
|
+
async function api(method, path, body, token, extraHeaders = {}, timeoutMs = 120_000) {
|
|
69
|
+
const res = await fetch(BASE + path, {
|
|
70
|
+
method,
|
|
71
|
+
headers: {
|
|
72
|
+
...(body !== undefined ? { 'content-type': 'application/json' } : {}),
|
|
73
|
+
...(token ? { authorization: `Bearer ${token}` } : {}),
|
|
74
|
+
...extraHeaders,
|
|
75
|
+
},
|
|
76
|
+
body: body === undefined ? undefined : JSON.stringify(body),
|
|
77
|
+
signal: AbortSignal.timeout(timeoutMs),
|
|
78
|
+
})
|
|
79
|
+
let json = null
|
|
80
|
+
try {
|
|
81
|
+
json = await res.json()
|
|
82
|
+
}
|
|
83
|
+
catch { /* 非 JSON */ }
|
|
84
|
+
return { status: res.status, headers: res.headers, ...json }
|
|
85
|
+
}
|
|
86
|
+
const invText = r => String(r?.data?.result?.text ?? r?.data?.text ?? '')
|
|
87
|
+
const invErr = r => Boolean(r?.data?.result?.isError ?? r?.data?.isError)
|
|
88
|
+
const dbPath = join(ROOT, 'home', 'data', 'workshop.sqlite')
|
|
89
|
+
const agentTokenOf = (agentId) => {
|
|
90
|
+
const db = new DatabaseSync(dbPath)
|
|
91
|
+
try {
|
|
92
|
+
return String(db.prepare('SELECT token FROM channel_agents WHERE id = ?').get(agentId)?.token ?? '')
|
|
93
|
+
}
|
|
94
|
+
finally {
|
|
95
|
+
db.close()
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/** 取描述中的某段(段首标签 → 到行尾) */
|
|
99
|
+
const segment = (desc, label) => {
|
|
100
|
+
const m = String(desc ?? '').match(new RegExp(`${label.replace(/[()()]/g, m2 => `\\${m2}`)}[::]([^\\n]*)`))
|
|
101
|
+
return m ? m[1] : ''
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/** 起一个 stdio MCP 桥(面 B)并完成 initialize */
|
|
105
|
+
async function startBridge(agentId, agentToken) {
|
|
106
|
+
const proc = spawn(process.execPath, [join(REPO, 'server', 'harness', 'aw-mcp-bridge.mjs')], {
|
|
107
|
+
cwd: REPO,
|
|
108
|
+
env: { ...process.env, NO_PROXY: '127.0.0.1,localhost', HTTP_PROXY: '', HTTPS_PROXY: '', AW_BASE_URL: BASE, AW_AGENT_ID: agentId, AW_AGENT_TOKEN: agentToken },
|
|
109
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
110
|
+
windowsHide: true,
|
|
111
|
+
})
|
|
112
|
+
const pending = new Map()
|
|
113
|
+
let nextId = 1
|
|
114
|
+
const rl = createInterface({ input: proc.stdout })
|
|
115
|
+
rl.on('line', (line) => {
|
|
116
|
+
let msg
|
|
117
|
+
try {
|
|
118
|
+
msg = JSON.parse(line)
|
|
119
|
+
}
|
|
120
|
+
catch { return }
|
|
121
|
+
if (msg?.id != null && pending.has(msg.id)) {
|
|
122
|
+
pending.get(msg.id)(msg)
|
|
123
|
+
pending.delete(msg.id)
|
|
124
|
+
}
|
|
125
|
+
})
|
|
126
|
+
const request = (method, params) => new Promise((resolveRpc, reject) => {
|
|
127
|
+
const id = nextId++
|
|
128
|
+
const timer = setTimeout(() => reject(new Error(`MCP ${method} 超时`)), 60_000)
|
|
129
|
+
pending.set(id, (msg) => {
|
|
130
|
+
clearTimeout(timer)
|
|
131
|
+
resolveRpc(msg)
|
|
132
|
+
})
|
|
133
|
+
proc.stdin.write(`${JSON.stringify({ jsonrpc: '2.0', id, method, params })}\n`)
|
|
134
|
+
})
|
|
135
|
+
await request('initialize', { protocolVersion: '2024-11-05', capabilities: {}, clientInfo: { name: 'e2e', version: '1' } })
|
|
136
|
+
proc.stdin.write(`${JSON.stringify({ jsonrpc: '2.0', method: 'notifications/initialized' })}\n`)
|
|
137
|
+
return {
|
|
138
|
+
proc,
|
|
139
|
+
request,
|
|
140
|
+
stop: () => {
|
|
141
|
+
try {
|
|
142
|
+
proc.stdin.end()
|
|
143
|
+
}
|
|
144
|
+
catch { /* noop */ }
|
|
145
|
+
try {
|
|
146
|
+
proc.kill()
|
|
147
|
+
}
|
|
148
|
+
catch { /* noop */ }
|
|
149
|
+
},
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
const textOfMcp = msg => String(msg?.result?.content?.map(c => c.text ?? '').join('\n') ?? '')
|
|
154
|
+
|
|
155
|
+
try {
|
|
156
|
+
let healthy = false
|
|
157
|
+
for (let i = 0; i < 90; i++) {
|
|
158
|
+
await sleep(2000)
|
|
159
|
+
try {
|
|
160
|
+
const h = await api('GET', '/api/health', undefined, undefined, {}, 3000)
|
|
161
|
+
if (h?.data?.status === 'ok' && h?.data?.workshop === 'ready') {
|
|
162
|
+
healthy = true
|
|
163
|
+
break
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
catch { /* 未就绪 */ }
|
|
167
|
+
}
|
|
168
|
+
ok('T1', '隔离实例启动 + workshop ready', healthy, `port=${port}`)
|
|
169
|
+
if (!healthy) throw new Error('实例未就绪')
|
|
170
|
+
|
|
171
|
+
const admin = (await api('POST', '/api/users/register', { name: `ts-admin-${TAG}`, email: `ts-${TAG}@awshop.local`, password: 'TsAdmin#2026' })).data?.token
|
|
172
|
+
ok('T1b', 'admin 注册', Boolean(admin))
|
|
173
|
+
const H = () => admin
|
|
174
|
+
|
|
175
|
+
// T1c:普通用户(admin 建号 + 登录,避开自助注册开关差异)
|
|
176
|
+
const plainEmail = `ts-plain-${TAG}@awshop.local`
|
|
177
|
+
const created = await api('POST', '/api/users', { name: `ts-plain-${TAG}`, email: plainEmail, password: 'TsPlain#2026', role: 'user' }, H())
|
|
178
|
+
const login = await api('POST', '/api/users/login', { email: plainEmail, password: 'TsPlain#2026' })
|
|
179
|
+
const plain = login?.data?.token
|
|
180
|
+
ok('T1c', '普通用户创建+登录(无产线授权)', created.status === 200 && Boolean(plain), `create=${created.status} login=${login.status}`)
|
|
181
|
+
|
|
182
|
+
// ── T2 场景:两条产线 + 数采节点 + 数控/配方 ──
|
|
183
|
+
const lineA = (await api('POST', '/api/workshop/dcw/lines', { name: `工具面线A-${TAG}` }, H())).data?.line?.id
|
|
184
|
+
const lineB = (await api('POST', '/api/workshop/dcw/lines', { name: `工具面线B-${TAG}` }, H())).data?.line?.id
|
|
185
|
+
const dnA1 = (await api('POST', '/api/workshop/daq', { templateRef: 'daq-temp-tc', name: `A1专属数采-${TAG}`, driver: 'mock', lineId: lineA, intervalMs: 1000, publishIntervalMs: 0 }, H())).data?.node?.id
|
|
186
|
+
const dnA2 = (await api('POST', '/api/workshop/daq', { templateRef: 'daq-temp-tc', name: `A2专属数采-${TAG}`, driver: 'mock', lineId: lineA, intervalMs: 1000, publishIntervalMs: 0 }, H())).data?.node?.id
|
|
187
|
+
const dnB1 = (await api('POST', '/api/workshop/daq', { templateRef: 'daq-temp-tc', name: `B线数采-${TAG}`, driver: 'mock', lineId: lineB, intervalMs: 1000, publishIntervalMs: 0 }, H())).data?.node?.id
|
|
188
|
+
const tpl = (await api('POST', '/api/workshop/dcw/templates', { name: `工具面参数-${TAG}`, ch: '压力', unit: 'bar', min: 0, max: 100, decimals: 1 }, H())).data?.template?.key
|
|
189
|
+
const dcwA = (await api('POST', '/api/workshop/dcw', { templateRef: tpl, name: `A线数控-${TAG}`, driver: 'mock', lineId: lineA, stepLimit: 20, driverConfig: { key: `ts-${TAG}` } }, H())).data?.node?.id
|
|
190
|
+
const product = (await api('POST', '/api/workshop/dcw/products', { lineId: lineA, name: `工具面产品-${TAG}` }, H())).data?.product?.id
|
|
191
|
+
const recipeA = (await api('POST', '/api/workshop/dcw/recipes', { productId: product, name: `工具面配方-${TAG}`, params: [{ nodeId: dcwA, value: 50, min: 0, max: 100 }] }, H())).data?.recipe?.id
|
|
192
|
+
ok('T2', '建两条线/三数采节点/数控/产品/配方', Boolean(lineA && lineB && dnA1 && dnA2 && dnB1 && dcwA && product && recipeA),
|
|
193
|
+
JSON.stringify({ lineA, lineB, dnA1, dnA2, dnB1, dcwA, recipeA }).slice(0, 320))
|
|
194
|
+
|
|
195
|
+
// ── T3 频道(绑 A 线)+ 两个 worker(同角色,仅绑定不同) ──
|
|
196
|
+
const ch = (await api('POST', '/api/workshop/channels', { name: `工具面频道-${TAG}`, leadAgent: { name: `工具面lead-${TAG}`, harness: 'omp' } }, H())).data
|
|
197
|
+
const channelId = ch?.channelId
|
|
198
|
+
await api('PUT', `/api/workshop/channels/${channelId}/line`, { lineId: lineA }, H())
|
|
199
|
+
const wA = (await api('POST', `/api/workshop/channels/${channelId}/agents`, { name: `AgentA1-${TAG}`, harness: 'mock', role: 'worker' }, H())).data
|
|
200
|
+
const wB = (await api('POST', `/api/workshop/channels/${channelId}/agents`, { name: `AgentA2-${TAG}`, harness: 'mock', role: 'worker' }, H())).data
|
|
201
|
+
const agentA = String(wA?.id ?? wA?.agentId ?? '')
|
|
202
|
+
const agentB = String(wB?.id ?? wB?.agentId ?? '')
|
|
203
|
+
ok('T3', '频道创建 + 绑 A 线 + 两个 worker', Boolean(channelId && agentA && agentB), JSON.stringify({ channelId, agentA, agentB }).slice(0, 240))
|
|
204
|
+
|
|
205
|
+
// ── T4 差异化绑定:AgentA1→dnA1(daq)+recipeA;B2→dnA2(daq,无配方) ──
|
|
206
|
+
const bindA = await api('POST', '/api/workshop/agent-tools/bindings', { agentId: agentA, nodeId: dnA1, kind: 'daq' }, H())
|
|
207
|
+
const bindB = await api('POST', '/api/workshop/agent-tools/bindings', { agentId: agentB, nodeId: dnA2, kind: 'daq' }, H())
|
|
208
|
+
const bindRecipe = await api('POST', '/api/workshop/agent-tools/bindings', { agentId: agentA, nodeId: recipeA, kind: 'recipe' }, H())
|
|
209
|
+
ok('T4', '差异化绑定(A1→dnA1+配方;A2→dnA2)', bindA.status === 200 && bindB.status === 200 && bindRecipe.status === 200,
|
|
210
|
+
`status=${bindA.status}/${bindB.status}/${bindRecipe.status} msg=${String(bindB?.message ?? '').slice(0, 120)}`)
|
|
211
|
+
|
|
212
|
+
// T4c:频道产线一致性——绑他线节点应被拒(产品规则,证明隔离)
|
|
213
|
+
const crossBind = await api('POST', '/api/workshop/agent-tools/bindings', { agentId: agentB, nodeId: dnB1, kind: 'daq' }, H())
|
|
214
|
+
ok('T4c', '频道绑 A 线 → 成员绑 B 线节点被拒(403 产线隔离)', crossBind.status === 403,
|
|
215
|
+
`status=${crossBind.status} code=${String(crossBind?.code ?? '')} msg=${String(crossBind?.message ?? '').slice(0, 140)}`)
|
|
216
|
+
|
|
217
|
+
const tokenA = agentTokenOf(agentA)
|
|
218
|
+
const tokenB = agentTokenOf(agentB)
|
|
219
|
+
ok('T4b', '两个 Agent 实例 token 独立', tokenA.length > 20 && tokenB.length > 20 && tokenA !== tokenB, `lenA=${tokenA.length} lenB=${tokenB.length}`)
|
|
220
|
+
|
|
221
|
+
// ── T5 注入面:同一份工具面,描述按各自绑定差异化 ──
|
|
222
|
+
const listA = await api('GET', `/api/workshop/agent-tools/list?agentId=${agentA}`, undefined, undefined, { 'x-aw-agent-token': tokenA })
|
|
223
|
+
const listB = await api('GET', `/api/workshop/agent-tools/list?agentId=${agentB}`, undefined, undefined, { 'x-aw-agent-token': tokenB })
|
|
224
|
+
const toolsA = listA?.data?.tools ?? []
|
|
225
|
+
const toolsB = listB?.data?.tools ?? []
|
|
226
|
+
const descA = String(toolsA.find(t => t.name === 'daq_query')?.description ?? '')
|
|
227
|
+
const descB = String(toolsB.find(t => t.name === 'daq_query')?.description ?? '')
|
|
228
|
+
const boundSegA = segment(descA, '本 Agent 直接绑定的数采节点(仅这些可查)')
|
|
229
|
+
const boundSegB = segment(descB, '本 Agent 直接绑定的数采节点(仅这些可查)')
|
|
230
|
+
const recipeSegA = segment(String(toolsA.find(t => t.name === 'recipe_update')?.description ?? ''), '本 Agent 已绑定的配方(仅这些可写/下发)')
|
|
231
|
+
const recipeSegB = segment(String(toolsB.find(t => t.name === 'recipe_update')?.description ?? ''), '本 Agent 已绑定的配方(仅这些可写/下发)')
|
|
232
|
+
ok('T5a', '两 Agent 工具面非空(同一份目录装配)', toolsA.length > 20 && toolsB.length > 20, `A=${toolsA.length} B=${toolsB.length}`)
|
|
233
|
+
ok('T5b', 'A1 绑定段含 dnA1、不含 dnA2', boundSegA.includes(dnA1) && !boundSegA.includes(dnA2), boundSegA.slice(0, 180))
|
|
234
|
+
ok('T5c', 'A2 绑定段含 dnA2、不含 dnA1', boundSegB.includes(dnA2) && !boundSegB.includes(dnA1), boundSegB.slice(0, 180))
|
|
235
|
+
ok('T5d', '配方绑定只进 A1 描述(A2 无配方段)', recipeSegA.includes(recipeA) && !recipeSegB.includes(recipeA), `A=${recipeSegA.slice(0, 90)} B=${recipeSegB.slice(0, 60)}`)
|
|
236
|
+
ok('T5e', 'A1 描述不含他线节点 dnB1', !descA.includes(dnB1), '')
|
|
237
|
+
// T5f(对象模型取证):两 Agent 工具名集合完全一致、同一工具描述不同 ——
|
|
238
|
+
// 证明设计是「单一静态定义 + 按 Agent 即时编译视图」,不是为每个 Agent 克隆一套工具对象
|
|
239
|
+
const namesA = toolsA.map(t => t.name).sort()
|
|
240
|
+
const namesB = toolsB.map(t => t.name).sort()
|
|
241
|
+
ok('T5f', '同名工具集 + 不同描述(视图编译,非对象克隆)', JSON.stringify(namesA) === JSON.stringify(namesB) && descA !== descB,
|
|
242
|
+
`names equal=${JSON.stringify(namesA) === JSON.stringify(namesB)} descDiff=${descA !== descB}`)
|
|
243
|
+
|
|
244
|
+
// ── T6 ETag/304(WP6) ──
|
|
245
|
+
const etag = listA.headers?.get('etag') ?? ''
|
|
246
|
+
const cond = await fetch(`${BASE}/api/workshop/agent-tools/list?agentId=${agentA}`, {
|
|
247
|
+
headers: { 'x-aw-agent-token': tokenA, 'if-none-match': etag },
|
|
248
|
+
signal: AbortSignal.timeout(15_000),
|
|
249
|
+
})
|
|
250
|
+
ok('T6', '工具面 ETag + If-None-Match → 304 空体', Boolean(etag) && cond.status === 304, `etag=${etag} status=${cond.status}`)
|
|
251
|
+
|
|
252
|
+
// ── T7 执行面 verify:原生 invoke 按绑定面裁剪 ──
|
|
253
|
+
const callAs = (agentId, tok, tool, args) => api('POST', '/api/workshop/agent-tools/invoke', { agentId, tool, args }, undefined, { 'x-aw-agent-token': tok })
|
|
254
|
+
const ownA = await callAs(agentA, tokenA, 'daq_query', { node_id: dnA1 })
|
|
255
|
+
const otherA = await callAs(agentA, tokenA, 'daq_query', { node_id: dnB1 })
|
|
256
|
+
const ownB = await callAs(agentB, tokenB, 'daq_query', { node_id: dnA2 })
|
|
257
|
+
const sharedB = await callAs(agentB, tokenB, 'daq_query', { node_id: dnA1 })
|
|
258
|
+
ok('T7a', 'A1 查自己绑定节点 → 放行', !invErr(ownA), invText(ownA).slice(0, 120))
|
|
259
|
+
ok('T7b', 'A1 查他线节点 → 拒绝(引用校验,越线)', invErr(otherA) && /工具调用被拒/.test(invText(otherA)), invText(otherA).slice(0, 200))
|
|
260
|
+
ok('T7c', 'A2 查自己绑定节点 → 放行', !invErr(ownB), invText(ownB).slice(0, 120))
|
|
261
|
+
ok('T7d', '频道绑线只读扩权:A2 可读 A 线未绑定节点', !invErr(sharedB), invText(sharedB).slice(0, 120))
|
|
262
|
+
|
|
263
|
+
// ── T8 配方写面:未绑定被 recipe 门拒;已绑定进入 HITL(超时拒绝) ──
|
|
264
|
+
const trialB = await callAs(agentB, tokenB, 'recipe_trial', { recipe_id: recipeA, params: [{ node_id: dcwA, value: 55 }], hypothesis: 'E2E:验证未绑定配方写面被拒' })
|
|
265
|
+
ok('T8a', 'A2(未绑配方)recipe_trial → 绑定门拒绝(未进入审批)', invErr(trialB) && /绑定|授权|被拒/.test(invText(trialB)) && !/审批/.test(invText(trialB)), invText(trialB).slice(0, 220))
|
|
266
|
+
const trialA = await callAs(agentA, tokenA, 'recipe_trial', { recipe_id: recipeA, params: [{ node_id: dcwA, value: 55 }], hypothesis: 'E2E:验证已绑定配方进入 HITL' })
|
|
267
|
+
// 运行门:未开跑的配方不可写入/下发(产品约束)。因此可判定的差异是「闸门深度」:
|
|
268
|
+
// 未绑定者停在①绑定门;已绑定者通过①②,停在③运行门 —— 证明绑定面真的在参与执行期判定。
|
|
269
|
+
ok('T8b', 'A1(已绑配方)通过绑定门、被更深层运行门拒绝(未绑定者到不了该门)',
|
|
270
|
+
invErr(trialA) && /运行门|未在执行/.test(invText(trialA)) && !/你未绑定该配方/.test(invText(trialA)), invText(trialA).slice(0, 240))
|
|
271
|
+
|
|
272
|
+
// ── T9 MCP 桥(面 B):per-agent tools/list + tools/call 同链治理 ──
|
|
273
|
+
const bridgeA = await startBridge(agentA, tokenA)
|
|
274
|
+
try {
|
|
275
|
+
const list = await bridgeA.request('tools/list', {})
|
|
276
|
+
const mcpTools = list?.result?.tools ?? []
|
|
277
|
+
const mcpDescA = String(mcpTools.find(t => t.name === 'daq_query')?.description ?? '')
|
|
278
|
+
ok('T9a', 'MCP tools/list 返回 per-agent 工具面(≥20)', mcpTools.length >= 20, `count=${mcpTools.length}`)
|
|
279
|
+
ok('T9b', 'MCP 描述与原生注入面同源(A1 绑定段含 dnA1)', segment(mcpDescA, '本 Agent 直接绑定的数采节点(仅这些可查)').includes(dnA1), mcpDescA.slice(-140))
|
|
280
|
+
const callOwn = await bridgeA.request('tools/call', { name: 'daq_query', arguments: { node_id: dnA1 } })
|
|
281
|
+
ok('T9c', 'MCP tools/call 自己节点 → 成功', !callOwn?.result?.isError, textOfMcp(callOwn).slice(0, 120))
|
|
282
|
+
const callOther = await bridgeA.request('tools/call', { name: 'daq_query', arguments: { node_id: dnB1 } })
|
|
283
|
+
ok('T9d', 'MCP tools/call 他线节点 → 同链拒绝(与原生一致)', Boolean(callOther?.result?.isError) && /工具调用被拒/.test(textOfMcp(callOther)), textOfMcp(callOther).slice(0, 200))
|
|
284
|
+
const callRes = await bridgeA.request('tools/call', { name: 'industrial_resources', arguments: { limit: 10 } })
|
|
285
|
+
ok('T9e', 'industrial_resources 经 MCP 可用(分页绑定面)', !callRes?.result?.isError && /绑定面资源/.test(textOfMcp(callRes)), textOfMcp(callRes).slice(0, 160))
|
|
286
|
+
}
|
|
287
|
+
finally {
|
|
288
|
+
bridgeA.stop()
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
// ── T10 WP2:ingest 兜底路径需产线 operate ──
|
|
292
|
+
const pushPlain = await api('POST', `/api/workshop/daq/${dnA1}/ingest`, { value: 42, at: new Date().toISOString() }, plain)
|
|
293
|
+
const pushAdmin = await api('POST', `/api/workshop/daq/${dnA1}/ingest`, { value: 42, at: new Date().toISOString() }, admin)
|
|
294
|
+
ok('T10a', '普通用户(无产线授权)推送 → 403 LINE_FORBIDDEN', pushPlain.status === 403, `status=${pushPlain.status} code=${String(pushPlain?.code ?? '')} msg=${String(pushPlain?.message ?? '').slice(0, 120)}`)
|
|
295
|
+
ok('T10b', 'admin(operate)推送 → 200 落库', pushAdmin.status === 200 && pushAdmin?.data?.accepted === true, `status=${pushAdmin.status}`)
|
|
296
|
+
const tooOld = await api('POST', `/api/workshop/daq/${dnA1}/ingest`, { value: 1, at: new Date(Date.now() - 6 * 3600_000).toISOString() }, admin)
|
|
297
|
+
ok('T10c', '超回填窗(6h 前)→ 400(默认 ±1h)', tooOld.status === 400, `status=${tooOld.status} msg=${String(tooOld?.message ?? '').slice(0, 120)}`)
|
|
298
|
+
|
|
299
|
+
// ── T11 WP3:rotate 后旧 token 宽限内可用;列表只回 tokenTail ──
|
|
300
|
+
const rotated = await api('POST', `/api/workshop/channels/${channelId}/agents/${agentA}/rotate-token`, {}, H())
|
|
301
|
+
const newToken = String(rotated?.data?.token ?? '')
|
|
302
|
+
ok('T11a', 'rotate-token 返回一次性新 token', rotated.status === 200 && newToken.length > 20 && newToken !== tokenA, `status=${rotated.status}`)
|
|
303
|
+
const afterOld = await callAs(agentA, tokenA, 'daq_query', { node_id: dnA1 })
|
|
304
|
+
const afterNew = await callAs(agentA, newToken, 'daq_query', { node_id: dnA1 })
|
|
305
|
+
ok('T11b', '旧 token 宽限窗内仍可用(桥重连过渡)', !invErr(afterOld), invText(afterOld).slice(0, 100))
|
|
306
|
+
ok('T11c', '新 token 立即生效', !invErr(afterNew), invText(afterNew).slice(0, 100))
|
|
307
|
+
const tpls = await api('GET', '/api/workshop/agents', undefined, H())
|
|
308
|
+
const arr = Array.isArray(tpls?.data) ? tpls.data : []
|
|
309
|
+
const inst = arr.flatMap(a => a.instances ?? []).find(i => i.id === agentA) ?? null
|
|
310
|
+
ok('T11d', '列表接口不回全量 token(只回 tokenTail)', inst == null || (inst.token === undefined && typeof inst.tokenTail === 'string' && inst.tokenTail.length === 4),
|
|
311
|
+
JSON.stringify(inst).slice(0, 160))
|
|
312
|
+
|
|
313
|
+
// ── T12 审计:rotate 留痕 ──
|
|
314
|
+
const audit = await api('GET', '/api/workshop/ops-logs?scope=all&limit=300', undefined, H())
|
|
315
|
+
const acts = (audit?.data?.logs ?? []).map(x => x.action)
|
|
316
|
+
ok('T12', 'rotate 审计落账(agent.token.rotate)', acts.includes('agent.token.rotate'), acts.filter(a => String(a).startsWith('agent.')).join(','))
|
|
317
|
+
|
|
318
|
+
// ── T13 真实作业:两 Agent 并行各自完成一次真实作业闭环(查数→结论留痕) ──
|
|
319
|
+
// 每个作业链只触碰自己绑定面的对象:作业 A 读 dnA1、作业 B 读 dnA2,各自 analysis_save 留痕
|
|
320
|
+
// (台账 target line=频道绑线),再从台账读面核验归因。
|
|
321
|
+
{
|
|
322
|
+
const runInspectionJob = async (agentId, tok, nodeId, title, summary) => {
|
|
323
|
+
const q = await callAs(agentId, tok, 'daq_query', { node_id: nodeId })
|
|
324
|
+
if (invErr(q)) return { text: invText(q), err: true }
|
|
325
|
+
const save = await callAs(agentId, tok, 'analysis_save', { title, summary })
|
|
326
|
+
return { text: invText(save), err: invErr(save) }
|
|
327
|
+
}
|
|
328
|
+
const [rA, rB] = await Promise.all([
|
|
329
|
+
runInspectionJob(agentA, tokenA, dnA1, `作业A-节点健康巡检-${TAG}`, `AgentA1 基于 dnA1 窗口数据完成巡检留痕(作业闭环验证)`),
|
|
330
|
+
runInspectionJob(agentB, tokenB, dnA2, `作业B-节点健康巡检-${TAG}`, `AgentA2 基于 dnA2 窗口数据完成巡检留痕(作业闭环验证)`),
|
|
331
|
+
])
|
|
332
|
+
ok('T13a', '作业A 闭环(查数+留痕)成功', !rA.err && /已保存|留痕|台账/.test(rA.text ?? ''), String(rA.text).slice(0, 180))
|
|
333
|
+
ok('T13b', '作业B 闭环(查数+留痕)成功', !rB.err && /已保存|留痕|台账/.test(rB.text ?? ''), String(rB.text).slice(0, 180))
|
|
334
|
+
const ledger = await callAs(agentA, tokenA, 'analysis_query', {})
|
|
335
|
+
const bothVisible = /作业A-节点健康巡检/.test(invText(ledger)) && /作业B-节点健康巡检/.test(invText(ledger))
|
|
336
|
+
ok('T13c', '两份作业产物均落分析台账(可读回)', !invErr(ledger) && bothVisible, invText(ledger).slice(0, 220))
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
const pass = results.filter(r => r.pass).length
|
|
340
|
+
const total = results.length
|
|
341
|
+
console.log(`\n═══ 工具面多 Agent 实机 E2E:${pass} PASS / ${total - pass} FAIL ═══`)
|
|
342
|
+
const outDir = join(REPO, 'docs', 'audit', 'evidence', '2026-10-24-tool-surface')
|
|
343
|
+
mkdirSync(outDir, { recursive: true })
|
|
344
|
+
writeFileSync(join(outDir, 'multiagent-report.json'), JSON.stringify({ at: new Date().toISOString(), port, results, pass, total }, null, 2))
|
|
345
|
+
process.exitCode = total - pass === 0 ? 0 : 1
|
|
346
|
+
}
|
|
347
|
+
finally {
|
|
348
|
+
try {
|
|
349
|
+
const pid = child.pid
|
|
350
|
+
if (pid) spawnSync('taskkill', ['//T', '//F', '//PID', String(pid)], { stdio: 'ignore', windowsHide: true })
|
|
351
|
+
}
|
|
352
|
+
catch { /* 清场失败不掩盖结果 */ }
|
|
353
|
+
}
|