agentworkshop 0.8.8 → 0.9.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 +68 -0
- package/.output/.AgentWorkShop/prompts/host-tools.json +68 -0
- package/.output/.AgentWorkShop/schema.json +2 -0
- package/.output/nitro.json +1 -1
- package/.output/public/_nuxt/{Cdi9qfTr.js → CDO7Zey1.js} +2 -2
- package/.output/public/_nuxt/builds/latest.json +1 -1
- package/.output/public/_nuxt/builds/meta/f507c33b-4ecc-4e32-af88-2e3736b443e9.json +1 -0
- package/.output/server/chunks/_/access.mjs +1 -1
- package/.output/server/chunks/_/data-export.mjs +5 -5
- package/.output/server/chunks/_/data-query.mjs +2 -2
- package/.output/server/chunks/_/eda-run.repo.mjs +3 -3
- package/.output/server/chunks/_/features.mjs +5 -5
- package/.output/server/chunks/_/golden.mjs +2 -2
- package/.output/server/chunks/_/host-bindings.mjs +1 -1
- package/.output/server/chunks/_/index.mjs +2 -2
- package/.output/server/chunks/_/mes-secrets.repo.mjs +1 -1
- package/.output/server/chunks/_/nitro.mjs +2556 -1314
- package/.output/server/chunks/_/nitro.mjs.map +1 -1
- package/.output/server/chunks/_/spc.mjs +2 -2
- package/.output/server/chunks/build/_id_-CsCtnbwe.mjs +1 -1
- package/.output/server/chunks/build/_id_-P1W47Gqq.mjs +1 -1
- package/.output/server/chunks/build/_wsId_-DpOErFj6.mjs +1 -1
- package/.output/server/chunks/build/agents-D7CdEUTv.mjs +1 -1
- package/.output/server/chunks/build/aml-DRAFRcGU.mjs +1 -1
- package/.output/server/chunks/build/analysis-J9axLuRt.mjs +1 -1
- package/.output/server/chunks/build/api-B4Om0mEc.mjs +1 -1
- package/.output/server/chunks/build/api-BEW_ebY_.mjs +1 -1
- package/.output/server/chunks/build/api-BsAgXWxi.mjs +1 -1
- package/.output/server/chunks/build/board-CJUc032b.mjs +1 -1
- package/.output/server/chunks/build/channel-templates-ggsBacZF.mjs +1 -1
- package/.output/server/chunks/build/constants-HPHJvjne.mjs +1 -1
- package/.output/server/chunks/build/daq-B_dRMDw4.mjs +1 -1
- package/.output/server/chunks/build/data-D8uX1dnm.mjs +1 -1
- package/.output/server/chunks/build/dcw-D_HD_H_2.mjs +1 -1
- package/.output/server/chunks/build/default-CNWS6NUw.mjs +1 -1
- package/.output/server/chunks/build/es-Bxu10NJ2.mjs +1 -1
- package/.output/server/chunks/build/logs-BnYSMRXM.mjs +1 -1
- package/.output/server/chunks/build/monitor-Cq6hRFeQ.mjs +1 -1
- package/.output/server/chunks/build/ontology-ohICfVVb.mjs +1 -1
- package/.output/server/chunks/build/operations-4zOVhW7o.mjs +1 -1
- package/.output/server/chunks/build/optimizer-BlWTsM-W.mjs +1 -1
- package/.output/server/chunks/build/pages-DEv4ProW.mjs +1 -1
- package/.output/server/chunks/build/permissions-DgXQZSyx.mjs +1 -1
- package/.output/server/chunks/build/pipeline-CkavMBhk.mjs +1 -1
- package/.output/server/chunks/build/plugins-LRjaSEZy.mjs +1 -1
- package/.output/server/chunks/build/schedules-Hz2DJUE2.mjs +1 -1
- package/.output/server/chunks/build/settings-DXLJPq7d.mjs +1 -1
- package/.output/server/chunks/build/studio-hSqH9TYS.mjs +1 -1
- package/.output/server/chunks/build/teams-BbwYJyzv.mjs +1 -1
- package/.output/server/chunks/build/tokens-GYaGJ35Z.mjs +1 -1
- package/.output/server/chunks/build/tools-CnYi9cou.mjs +1 -1
- package/.output/server/chunks/build/town-BV-hbwb5.mjs +1 -1
- package/.output/server/chunks/build/town-CcoQKjMj.mjs +1 -1
- package/.output/server/chunks/build/types-D6J7slEa.mjs +1 -1
- package/.output/server/chunks/build/types-DWqIeMRP.mjs +1 -1
- package/.output/server/chunks/build/useAgentHarnessOptions-Dq0l0Z6d.mjs +1 -1
- package/.output/server/chunks/build/useAgentTemplateActions-BFOHb5-L.mjs +1 -1
- package/.output/server/chunks/build/useAgentTemplateDialogState-CZzpu5og.mjs +1 -1
- package/.output/server/chunks/build/useAgentTemplateForm-CuJPOPcK.mjs +1 -1
- package/.output/server/chunks/build/useAgentTemplatesCatalog-B2bIhZLA.mjs +1 -1
- package/.output/server/chunks/build/useAmlDatasets-DeoE1idn.mjs +1 -1
- package/.output/server/chunks/build/useAmlEntities-BJhvdqHJ.mjs +1 -1
- package/.output/server/chunks/build/useAmlEnv-CDIZ6xTe.mjs +1 -1
- package/.output/server/chunks/build/useAmlExperiments-Dloi834i.mjs +1 -1
- package/.output/server/chunks/build/useAmlFormat-C2sl3MGB.mjs +1 -1
- package/.output/server/chunks/build/useAmlJobs-BF9LpwXz.mjs +1 -1
- package/.output/server/chunks/build/useAmlModels-_bweOr3R.mjs +1 -1
- package/.output/server/chunks/build/useAmlNotes-DQj980iX.mjs +1 -1
- package/.output/server/chunks/build/useAmlPredict-DHNgDSJn.mjs +1 -1
- package/.output/server/chunks/build/useAnalysisFeed-BrEGV_9x.mjs +1 -1
- package/.output/server/chunks/build/useDaqAddNode-D_Rkju0f.mjs +1 -1
- package/.output/server/chunks/build/useDaqDetailBinding-DCWaLKXT.mjs +1 -1
- package/.output/server/chunks/build/useDaqDetailFrames-BOIcOJRB.mjs +1 -1
- package/.output/server/chunks/build/useDaqDetailHistory-D6WulPVs.mjs +1 -1
- package/.output/server/chunks/build/useDaqDetailNode-BGMRUIXN.mjs +1 -1
- package/.output/server/chunks/build/useDaqDetailParams-Cm9a9r5G.mjs +1 -1
- package/.output/server/chunks/build/useDaqFilters-zAAVlzJQ.mjs +1 -1
- package/.output/server/chunks/build/useDaqNodeWindow-1DWj2H5G.mjs +1 -1
- package/.output/server/chunks/build/useDaqOptimizations-BE_9Z2s_.mjs +1 -1
- package/.output/server/chunks/build/useDaqTemplates-CK37sMfi.mjs +1 -1
- package/.output/server/chunks/build/useDashboardCharts-D45083s_.mjs +1 -1
- package/.output/server/chunks/build/useDashboardData-Cw8lrPo5.mjs +1 -1
- package/.output/server/chunks/build/useDcwAddNode-KnocMk1m.mjs +1 -1
- package/.output/server/chunks/build/useDcwCards-C53IiOcg.mjs +1 -1
- package/.output/server/chunks/build/useDcwDetailScope-D6qXrfZu.mjs +1 -1
- package/.output/server/chunks/build/useDcwDetailTemplates-DPOXu1o_.mjs +1 -1
- package/.output/server/chunks/build/useDcwFilter-DNQ6Ivwd.mjs +1 -1
- package/.output/server/chunks/build/useDcwLedger-BhbUBCbi.mjs +1 -1
- package/.output/server/chunks/build/useDcwLineMutations-KA7VnggO.mjs +1 -1
- package/.output/server/chunks/build/useDcwLineRun-3zx_UCxi.mjs +1 -1
- package/.output/server/chunks/build/useDcwParamApprovals-DzyY6Tmi.mjs +1 -1
- package/.output/server/chunks/build/useDcwProducts-B05ymt3k.mjs +1 -1
- package/.output/server/chunks/build/useDcwQuery-vWpgpSmJ.mjs +1 -1
- package/.output/server/chunks/build/useDcwQuickActions-DUkLy34S.mjs +1 -1
- package/.output/server/chunks/build/useDcwRecipes-BAb4Yg3d.mjs +1 -1
- package/.output/server/chunks/build/useDcwTemplates-D2aoejps.mjs +1 -1
- package/.output/server/chunks/build/useDcwWrites-7w8txksD.mjs +1 -1
- package/.output/server/chunks/build/useExpConfirmations-BM626N4p.mjs +1 -1
- package/.output/server/chunks/build/useLogsFormat-B-o4MHy7.mjs +1 -1
- package/.output/server/chunks/build/useLogsManual-D0dvgCsP.mjs +1 -1
- package/.output/server/chunks/build/useLogsQuery-D7hrJ3yn.mjs +1 -1
- package/.output/server/chunks/build/useLogsScope-DEUyq-My.mjs +1 -1
- package/.output/server/chunks/build/useMonitorColumns-vVnt3r5Q.mjs +1 -1
- package/.output/server/chunks/build/useMonitorData-DIkiLr_h.mjs +1 -1
- package/.output/server/chunks/build/useMonitorFormat-CyURtH8N.mjs +1 -1
- package/.output/server/chunks/build/useMonitorTerminal-Dj4QwRNW.mjs +1 -1
- package/.output/server/chunks/build/useOperationsFeed-Ci4mZAn_.mjs +1 -1
- package/.output/server/chunks/build/useRecipeDispatchApprovals-BYtiqfeb.mjs +1 -1
- package/.output/server/chunks/build/useTeamActions-BDjU06LP.mjs +1 -1
- package/.output/server/chunks/build/useTeamAddMemberDialog-J3oFn3FI.mjs +1 -1
- package/.output/server/chunks/build/useTeamCreateDialog-fbn4ixYu.mjs +1 -1
- package/.output/server/chunks/build/useTeamDeployDialog-BNezMD2k.mjs +1 -1
- package/.output/server/chunks/build/useTeamDialogState-CFRUQxAf.mjs +1 -1
- package/.output/server/chunks/build/useTeamPluginDialog-BZznrOVe.mjs +1 -1
- package/.output/server/chunks/build/useTeamsCatalog-DuZFP3oG.mjs +1 -1
- package/.output/server/chunks/build/useTokenClipboard-CwQpoFeP.mjs +1 -1
- package/.output/server/chunks/build/useTokenCreate-Ctl0YGhL.mjs +1 -1
- package/.output/server/chunks/build/useTokenRename-Cm3ypSfN.mjs +1 -1
- package/.output/server/chunks/build/useTokenReveal-CeoWL5Mt.mjs +1 -1
- package/.output/server/chunks/build/useTokensList-CNIzON3u.mjs +1 -1
- package/.output/server/chunks/build/useWorkbenchAuth-CY-bVFMu.mjs +1 -1
- package/.output/server/chunks/build/useWorkbenchWorkspaces-DhZQFss9.mjs +1 -1
- package/.output/server/chunks/build/useWorkspaceAuth-Dlvj9csD.mjs +1 -1
- package/.output/server/chunks/build/useWorkspaceChannels-CPFepxTN.mjs +1 -1
- package/.output/server/chunks/build/useWorkspacePanels-CTwREmq0.mjs +1 -1
- package/.output/server/chunks/build/useWorkspaceShell-BCypjjjE.mjs +1 -1
- package/.output/server/chunks/build/users-DjiVC_tS.mjs +1 -1
- package/.output/server/chunks/build/workshop-1gKeDASV.mjs +1 -1
- package/.output/server/chunks/routes/api/health.get.mjs +1 -1
- package/.output/server/chunks/routes/api/index.get.mjs +1 -1
- package/.output/server/chunks/routes/api/index.post.mjs +1 -1
- package/.output/server/chunks/routes/api/mcp/workshop.mjs +1 -1
- package/.output/server/chunks/routes/api/metrics.mjs +1 -1
- package/.output/server/chunks/routes/api/plugins/_name/_...path_.mjs +1 -1
- package/.output/server/chunks/routes/api/plugins/client/_name_.get.mjs +1 -1
- package/.output/server/chunks/routes/api/plugins/i18n.get.mjs +1 -1
- package/.output/server/chunks/routes/api/plugins/manifest.get.mjs +1 -1
- package/.output/server/chunks/routes/api/system/backup/list.get.mjs +1 -1
- package/.output/server/chunks/routes/api/system/backup/run.post.mjs +3 -3
- package/.output/server/chunks/routes/api/system/config-groups/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/system/config-groups/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/system/config.get.mjs +1 -1
- package/.output/server/chunks/routes/api/system/index.get.mjs +1 -1
- package/.output/server/chunks/routes/api/system/index.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/system/index.post.mjs +1 -1
- package/.output/server/chunks/routes/api/system/index2.get.mjs +1 -1
- package/.output/server/chunks/routes/api/system/monitor/terminal/ws.mjs +1 -1
- package/.output/server/chunks/routes/api/system/monitor/terminate.post.mjs +1 -1
- package/.output/server/chunks/routes/api/system/monitor.get.mjs +1 -1
- package/.output/server/chunks/routes/api/system/settings/events.get.mjs +1 -1
- package/.output/server/chunks/routes/api/system/settings/reset.post.mjs +1 -1
- package/.output/server/chunks/routes/api/system/timezone.get.mjs +1 -1
- package/.output/server/chunks/routes/api/users/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/users/_id_.get.mjs +1 -1
- package/.output/server/chunks/routes/api/users/_id_.put.mjs +1 -1
- package/.output/server/chunks/routes/api/users/change-password.post.mjs +1 -1
- package/.output/server/chunks/routes/api/users/index.get.mjs +1 -1
- package/.output/server/chunks/routes/api/users/index.post.mjs +1 -1
- package/.output/server/chunks/routes/api/users/login.post.mjs +1 -1
- package/.output/server/chunks/routes/api/users/logout.post.mjs +1 -1
- package/.output/server/chunks/routes/api/users/me.get.mjs +1 -1
- package/.output/server/chunks/routes/api/users/register.post.mjs +1 -1
- package/.output/server/chunks/routes/api/users/setup-status.get.mjs +1 -1
- package/.output/server/chunks/routes/api/users/tokens/_id/token.get.mjs +1 -1
- package/.output/server/chunks/routes/api/users/tokens/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/users/tokens/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/_...path_.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/a2a/send.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/approvals/_id/decide.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/grant.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/revoke.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/index.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/index.post.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/agent-tools/index2.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/invoke.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/list.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/agents/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/agents/_id_.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/agents/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/agents/subscribe.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/datasets/_id/preview.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/entities/prune.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/env/recheck.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/env/uv.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/env/venv.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/index.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/index.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/index2.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/index2.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/index3.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/index3.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/index4.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/index5.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/index6.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/index7.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/cancel.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/logs.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/retry.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/jobs/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/jobs/_id_.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/models/_id/predict.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/models/_id/promote.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/models/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/models/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id/train.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/twin/providers.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/analysis/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/analysis/_id_.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/analysis/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/approvals/_id/decide.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/assets/character/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/assets/devices/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/assets/index.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/assets/index.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/assets/index2.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/assets/index2.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/audit.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/caller.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channel-templates/_id/instantiate.post.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channel-templates/from-channel.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/activate.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/_memoryId_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/search.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/model.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/position.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/range.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/rotate-token.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/stop.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/chat/index.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/chat/index.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/chat/messages/_messageId/read.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/chat/permissions.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/events.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/execution-mode.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index.put.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index2.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index2.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index2.put.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index3.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index3.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index4.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index4.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index5.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index6.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index7.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/line.put.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/members/_userId/approve.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/members/_userId_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/members/join.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/members/leave.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/memories/_memoryId_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/queue.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/terminals.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/tools/reset.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/twin-profile.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/twin-profile.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/index.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/index.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels.post.mjs +7 -7
- package/.output/server/chunks/routes/api/workshop/daq/_id/bind.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id/bindings.put.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id/frames/content.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id/frames.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id/ingest.post.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/daq/_id/samples.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id/test.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/alarms/_id/ack.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/alarms.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/controller.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/export/_id_.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/export-file.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/index.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/index.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/index2.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/infra/reconnect.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/infra.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/query.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/storage/retention.put.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/storage/rollup.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/storage.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/test-driver.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id/bind.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id/bindings.put.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id/param-ledger.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id/read.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id/test.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id/write.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/controller.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index2.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index2.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index3.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index3.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index4.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index4.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index5.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index5.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index6.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index7.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/journal/node/_nodeId/rollback.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/line/query.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/start.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/stop.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/mes-artifacts/file.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/mes-hook-test.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/mes-test-read.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/judge.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/rollback.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/series.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id_.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id/read.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id/write.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/apply.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/mark-good.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/revert.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/rollback-good.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/versions.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.delete.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/index.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/close.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/data.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/rollback.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/test-driver.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/device-twins/_id/control.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/device-twins/_id/telemetry.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/device-twins/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/device-twins/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/charts/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/charts/_id_.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/charts/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/commonality.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/dashboards/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/dashboards/_id_.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/dashboards/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/features/jobs.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/features/run.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/golden/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/golden/deviation.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/golden/single.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/index.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/index.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/index2.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/index2.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/index3.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/index3.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/index4.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/index4.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/index5.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/index5.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/index6.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/index6.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/index7.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/index7.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/index8.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/index8.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/ocap/_id_.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/ocap/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/runs/_id/labels.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/runs.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/spc/_id/recompute.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/spc/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/spc/_id_.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/templates/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/templates/_id_.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/templates/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/eda/vm/predict.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/exp/confirmations/_id/decide.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/exp/index.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/fs/dirs.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/harnesses/_id/providers.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/harnesses.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/hitl/pending.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/hitl/respond.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index.put.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index10.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index10.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index11.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index12.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index13.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index14.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index15.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index16.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index2.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index2.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index3.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index3.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index4.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index4.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index5.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index5.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index6.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index6.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index7.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index7.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index8.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index8.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index9.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index9.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/mailbox/all.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/mailbox.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/memories/maintenance.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/mes/datasets.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/mes/index.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/mes/index.put.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/mes/points.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/mes/preview.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/mes/secrets/_ref_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/notifications/read.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/autofix.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/compile.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/evidence.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/publish.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/rules/_ruleId/approval-decision.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/rules/_ruleId/approval.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/rules/_ruleId/transition.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/subgraph.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/validate.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId_.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/ontology/export/_ontologyId_.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/ontology/index.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/ontology/scene.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/ontology/traces/_ontologyId_.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/ontology/versions/_ontologyId/compare.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/ontology/versions/_ontologyId_.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/optimization/bindings/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/optimization/capabilities.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/optimization/index.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/optimization/index.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/optimization/index2.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/optimization/profiles/_id/publish.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/optimization/recommendations/_id/crosscheck.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/optimization/recommendations/_id/dispatch.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/optimization/solve.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/plugins/_name/disable.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/plugins/_name/enable.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/plugins/index.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/process-model/datasets.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/process-model/eligibility.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/process-model/experiments.mjs +305 -20
- package/.output/server/chunks/routes/api/workshop/process-model/experiments.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/process-model/index.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/process-model/specs/_id/publish.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/process-model/train.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/runtime.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.put.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/scene/layouts.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/schedules/_id/run.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/schedules/_id/runs.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/schedules/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/schedules/_id_.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/schedules/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id/complete.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id/dispatch.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id/index.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id/reassign.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id/reopen.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id/report.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id/retry.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id/supersede.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id/update.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id_.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id/deploy.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id/index.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id/index.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id/index.put.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id/index2.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id/members/_agentId_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id_.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/tools/_name_.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/tools/sync.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/users/me.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/users/register.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/workspaces/_id/channel-templates/_tplId_.post.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/workspaces/index.delete.mjs +1 -1
- package/.output/server/chunks/routes/renderer.mjs +2 -2
- package/.output/server/chunks/virtual/entry.mjs +5 -1
- package/.output/server/chunks/virtual/precomputed.mjs +1 -1
- package/.output/server/index.mjs +1 -1
- package/.output/server/package.json +1 -1
- package/README-zh.md +3 -3
- package/README.md +3 -3
- package/config.yml +1 -1
- package/docs/aml.md +112 -112
- package/docs/cli.en.md +4 -4
- package/docs/cli.md +3 -3
- 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 +2 -0
- package/i18n/locales/zh-CN.ts +2 -0
- package/package.json +1 -1
- package/scripts/_audit/demo-shot-studio.mjs +37 -0
- package/scripts/_audit/demo-shots.mjs +38 -0
- package/scripts/_audit/gen-demo-report.py +69 -0
- package/scripts/_audit/mqtt-pub.mjs +13 -0
- package/scripts/_audit/mqtt-topic-probe.mjs +15 -0
- package/scripts/_audit/proto-b3-device-4021.mjs +90 -0
- package/scripts/_audit/proto-doc-device-4120.mjs +53 -0
- package/scripts/acceptance-scientific-loop.ts +224 -0
- package/scripts/generate-identifiability-fixtures.ts +98 -0
- package/server/api/workshop/process-model/experiments.ts +28 -2
- package/server/plugins-builtin/diag-bridge/host/plugin.mjs +759 -753
- package/server/plugins-builtin/rag-bridge/index.mjs +490 -484
- package/server/repositories/user.repository.ts +24 -1
- package/server/services/user.service.ts +8 -6
- package/server/services/workshop/agents/host-tool-bridge/catalog.ts +2 -0
- package/server/services/workshop/agents/host-tool-bridge/tools/industrial.ts +4 -1
- package/server/services/workshop/agents/host-tool-bridge/tools/messaging.ts +5 -1
- package/server/services/workshop/agents/industrial/aml-dataset-tools.ts +3 -0
- package/server/services/workshop/agents/industrial/bench-approval-only.ts +335 -58
- package/server/services/workshop/agents/industrial/dcw-tools.ts +7 -1
- package/server/services/workshop/agents/industrial/identifiability-tools.ts +247 -0
- package/server/services/workshop/agents/industrial/index.ts +1 -0
- package/server/services/workshop/agents/industrial/manual-approval.ts +3 -1
- package/server/services/workshop/agents/industrial/ops-tools.ts +58 -15
- package/server/services/workshop/agents/industrial/optimization-tools.ts +33 -19
- package/server/services/workshop/agents/plugin-governance.ts +22 -2
- package/server/services/workshop/aml/action-coverage.ts +253 -0
- package/server/services/workshop/aml/causal-claim.ts +68 -0
- package/server/services/workshop/aml/dataset-builder.ts +19 -0
- package/server/services/workshop/aml/gates.ts +45 -1
- package/server/services/workshop/aml/identifiability.ts +335 -0
- package/server/services/workshop/aml/intervention-ledger.ts +281 -0
- package/server/services/workshop/aml/ontology-learning.ts +143 -0
- package/server/services/workshop/aml/twin/cross-check.ts +176 -0
- package/server/services/workshop/daq/daq-controller/contracts.ts +3 -0
- package/server/services/workshop/daq/daq-controller/crud.ts +12 -2
- package/server/services/workshop/daq/daq-controller/push.ts +22 -0
- package/server/services/workshop/daq/drivers/mqtt.ts +28 -0
- package/server/services/workshop/daq/drivers/shared.ts +6 -0
- package/server/services/workshop/db/database/open.ts +2 -0
- package/server/services/workshop/db/database/rows.ts +4 -1
- package/server/services/workshop/db/database/schema.ts +38 -2
- package/server/services/workshop/db/message.repo.ts +10 -3
- package/server/services/workshop/dcw/dcw-controller/write-audit.ts +21 -1
- package/server/services/workshop/process-model/experiment-runner.ts +393 -0
- package/server/services/workshop/process-model/experiment.ts +25 -10
- package/server/services/workshop/runtime/agent-runtime/lifecycle.ts +34 -11
- package/server/services/workshop/runtime/agent-runtime/state.ts +6 -1
- package/server/services/workshop/settings.ts +4 -1
- package/server/services/workshop/types/a2a.ts +16 -1
- package/shared/config/schema.json +2 -0
- package/shared/dcw-protocol/closed-loop.ts +2 -0
- package/.output/public/_nuxt/builds/meta/1231252d-2864-43c0-83b2-4e70d3b86dea.json +0 -1
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 本体学习闭环(科学探索计划 P6,docs/plans/2026-11-02-scientific-exploration-plan.md):
|
|
3
|
+
* - backfillInterventionEvidence:干预台账的判定(效应/CI/MDE/欠功效/混杂)回灌 ontology_evidence,
|
|
4
|
+
* 以 intervention_events.id 为 source_ref(可追溯、幂等:同一干预不重复登记);
|
|
5
|
+
* - resolveCouplingFromOntology:供 P5 通道 B 查询"该 actuator→target 有没有耦合路径",
|
|
6
|
+
* 三值返回:true=有边;false=已发布本体存在但明确无边;null=未发布本体(unknown,不拦)。
|
|
7
|
+
* 只追加证据,**不改本体版本**(版本变更仍走 draft→approve→publish 人工链)。
|
|
8
|
+
*/
|
|
9
|
+
import { createHash } from 'node:crypto'
|
|
10
|
+
import { getOntologyRepo } from '../ontology/repo'
|
|
11
|
+
import type { InterventionEventRow } from './intervention-ledger'
|
|
12
|
+
|
|
13
|
+
function hashOf(s: string): string {
|
|
14
|
+
return createHash('sha256').update(s).digest('hex').slice(0, 32)
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/** 干预判定 → 证据等级(观测证据,不是人工断言) */
|
|
18
|
+
function evidenceLevelOf(verdict: string): string {
|
|
19
|
+
if (verdict === 'identifiable_effect' || verdict === 'no_resolvable_effect') return 'observed'
|
|
20
|
+
if (verdict === 'underpowered' || verdict === 'confounded') return 'observed_weak'
|
|
21
|
+
return 'observed_unassessed'
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export interface BackfillResult {
|
|
25
|
+
appended: boolean
|
|
26
|
+
reason: string
|
|
27
|
+
evidenceId?: string
|
|
28
|
+
ontologyId?: string
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* 回灌一次干预判定到本体证据账本(targetKind=relation,targetKey=`src->dst`)。
|
|
33
|
+
* 幂等:source_ref = 干预 id,已存在同 sourceRef 的行则跳过。
|
|
34
|
+
*/
|
|
35
|
+
export function backfillInterventionEvidence(event: InterventionEventRow): BackfillResult {
|
|
36
|
+
if (!event.targetNodeId) return { appended: false, reason: '干预无 targetNodeId(非判读路径),不登记耦合证据' }
|
|
37
|
+
if (event.verdict === 'pending' || event.verdict === 'unassessed') {
|
|
38
|
+
return { appended: false, reason: `判定 ${event.verdict} 未收口,不登记证据` }
|
|
39
|
+
}
|
|
40
|
+
const repo = getOntologyRepo()
|
|
41
|
+
const version = repo.latestPublishedForLine(event.lineId)
|
|
42
|
+
if (!version) return { appended: false, reason: '该产线无已发布本体,证据暂存于干预台账(发布后可按台账回填)' }
|
|
43
|
+
const targetKey = `${event.nodeId}->${event.targetNodeId}`
|
|
44
|
+
const existing = repo.listEvidence(version.id, { targetKind: 'relation', targetKey, limit: 500 })
|
|
45
|
+
if (existing.some(e => e.sourceRef === event.id)) {
|
|
46
|
+
return { appended: false, reason: '已登记(幂等跳过)', ontologyId: version.id }
|
|
47
|
+
}
|
|
48
|
+
const id = `ev-intv-${event.id}`
|
|
49
|
+
const detail = {
|
|
50
|
+
interventionId: event.id,
|
|
51
|
+
verdict: event.verdict,
|
|
52
|
+
effect: event.effect,
|
|
53
|
+
ciLow: event.ciLow,
|
|
54
|
+
ciHigh: event.ciHigh,
|
|
55
|
+
mde: event.mde,
|
|
56
|
+
fromValue: event.fromValue,
|
|
57
|
+
toValue: event.toValue,
|
|
58
|
+
path: event.path,
|
|
59
|
+
ts: event.ts,
|
|
60
|
+
note: event.verdict === 'no_resolvable_effect'
|
|
61
|
+
? '窗口充分的负结论:该步幅下无可分辨效应(不是失败)'
|
|
62
|
+
: event.verdict === 'underpowered'
|
|
63
|
+
? '欠功效:当前步幅/窗长不足,不能据此判定有无耦合'
|
|
64
|
+
: event.verdict === 'confounded'
|
|
65
|
+
? '被混杂:档位与时间不可分,不能据此判定有无耦合'
|
|
66
|
+
: '效应可分辨(CI 不含 0)',
|
|
67
|
+
}
|
|
68
|
+
repo.appendEvidence({
|
|
69
|
+
id,
|
|
70
|
+
ontologyId: version.id,
|
|
71
|
+
targetKind: 'relation',
|
|
72
|
+
targetKey,
|
|
73
|
+
level: evidenceLevelOf(event.verdict),
|
|
74
|
+
sourceType: 'intervention',
|
|
75
|
+
sourceRef: event.id,
|
|
76
|
+
sourceRefHash: hashOf(JSON.stringify(detail)),
|
|
77
|
+
detailJson: JSON.stringify(detail),
|
|
78
|
+
createdBy: event.actor || 'system',
|
|
79
|
+
createdAt: new Date().toISOString(),
|
|
80
|
+
})
|
|
81
|
+
return { appended: true, reason: '已登记', evidenceId: id, ontologyId: version.id }
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export interface OntologyCouplingResolution {
|
|
85
|
+
/** true=存在耦合路径;false=本体明确无路径;null=未声明/无已发布本体 */
|
|
86
|
+
hasCouplingPath: boolean | null
|
|
87
|
+
evidence: string[]
|
|
88
|
+
ontologyId?: string
|
|
89
|
+
version?: number
|
|
90
|
+
/** 该耦合的证据支持/否证计数(来自 intervention 回灌) */
|
|
91
|
+
supportCount: number
|
|
92
|
+
refuteCount: number
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* P5 通道 B:查询已发布本体里 control→target 的耦合路径。
|
|
97
|
+
* 关系匹配:predicate ∈ influences/actuates 且 src/dst 命中(节点 id → 语义绑定 entity_key 兜底)。
|
|
98
|
+
* 有已发布版本但找不到边 → hasCouplingPath=false(明确断言"无路径",这是可证伪的一等事实)。
|
|
99
|
+
*/
|
|
100
|
+
export function resolveCouplingFromOntology(lineId: string, controlNodeId: string, targetNodeId: string): OntologyCouplingResolution {
|
|
101
|
+
const repo = getOntologyRepo()
|
|
102
|
+
const version = repo.latestPublishedForLine(lineId)
|
|
103
|
+
if (!version) return { hasCouplingPath: null, evidence: [], supportCount: 0, refuteCount: 0 }
|
|
104
|
+
const keyOf = (kind: 'dcw' | 'daq', nodeId: string): string[] => {
|
|
105
|
+
const keys = [nodeId]
|
|
106
|
+
try {
|
|
107
|
+
for (const b of repo.listBindingsByTarget(kind, nodeId)) if (b.entityKey) keys.push(String(b.entityKey))
|
|
108
|
+
}
|
|
109
|
+
catch { /* 绑定表不可读 → 仅按节点 id 匹配 */ }
|
|
110
|
+
return keys
|
|
111
|
+
}
|
|
112
|
+
const srcs = keyOf('dcw', controlNodeId)
|
|
113
|
+
const dsts = keyOf('daq', targetNodeId)
|
|
114
|
+
const relations = repo.listRelations(version.id, version.version)
|
|
115
|
+
// 注意:repo 把 predicate 列映射为关系对象的 kind 字段(不是 predicate)
|
|
116
|
+
const hits = relations.filter(r => (r.kind === 'influences' || r.kind === 'actuates')
|
|
117
|
+
&& srcs.includes(String(r.srcKey)) && dsts.includes(String(r.dstKey)))
|
|
118
|
+
const targetKey = `${controlNodeId}->${targetNodeId}`
|
|
119
|
+
const ledger = repo.listEvidence(version.id, { targetKind: 'relation', targetKey, limit: 500 })
|
|
120
|
+
const verdictOf = (detailJson: string): string | undefined => {
|
|
121
|
+
try {
|
|
122
|
+
return (JSON.parse(detailJson) as { verdict?: string }).verdict
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
return undefined
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
const supportCount = ledger.filter(e => verdictOf(e.detailJson) === 'identifiable_effect').length
|
|
129
|
+
const refuteCount = ledger.filter(e => verdictOf(e.detailJson) === 'no_resolvable_effect').length
|
|
130
|
+
const evidence = [
|
|
131
|
+
...hits.map(h => `relation ${h.kind}:${h.srcKey}→${h.dstKey}(${h.status})`),
|
|
132
|
+
...(supportCount ? [`干预证据支持 ${supportCount} 次(效应可分辨)`] : []),
|
|
133
|
+
...(refuteCount ? [`干预证据否证 ${refuteCount} 次(无可分辨效应)`] : []),
|
|
134
|
+
]
|
|
135
|
+
return {
|
|
136
|
+
hasCouplingPath: hits.length > 0,
|
|
137
|
+
evidence,
|
|
138
|
+
ontologyId: version.id,
|
|
139
|
+
version: version.version,
|
|
140
|
+
supportCount,
|
|
141
|
+
refuteCount,
|
|
142
|
+
}
|
|
143
|
+
}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 下发前双通道互审(科学探索计划 P5,docs/plans/2026-11-02-scientific-exploration-plan.md):
|
|
3
|
+
* - 通道 A(模型):AML 代理模型对拟下发 Δ 的稳态增益(ARX 用阶跃仿真;无模型 = unknown);
|
|
4
|
+
* - 通道 B(本体/机理):已发布本体的 actuator→target 耦合断言(有路径/明确无路径/无声明)。
|
|
5
|
+
* 三值逻辑,只有**确证冲突**才拦(unknown 不拦 —— 缺证据不是反证):
|
|
6
|
+
* A 有效应 & B 明确无路径 → conflict(自动模式拒;人工模式必须写明理由)
|
|
7
|
+
* A 无效应 & B 断言有路径 → conflict(同规则)
|
|
8
|
+
* UQ 拒收(OOD/覆盖率低) → require_human(auto 模式下拒)
|
|
9
|
+
* 可辨识性欠功效/混杂 → allow_with_warning(卡片写明"当前步幅不构成可分辨干预")
|
|
10
|
+
* 输出科学载荷(审批卡自动填):效应估计/CI/MDE/动作覆盖/证据边/可证伪方式。
|
|
11
|
+
*/
|
|
12
|
+
import { arxStepResponseGain, type ArxArtifactLike, type ActionCoverage } from '../action-coverage'
|
|
13
|
+
|
|
14
|
+
export interface ModelChannelInput {
|
|
15
|
+
/** null = 无可用模型/工件不支持 */
|
|
16
|
+
artifact: ArxArtifactLike | null
|
|
17
|
+
targetNodeId: string
|
|
18
|
+
/** UQ/OOD 结论(来自 uq-ood.evaluateEnsemble;无模型时省略) */
|
|
19
|
+
uq?: { accepted: boolean, rejectCode?: string }
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export interface OntologyChannelInput {
|
|
23
|
+
/** true=存在 actuator→target 耦合路径;false=本体**明确断言无耦合**;null=本体未声明(unknown) */
|
|
24
|
+
hasCouplingPath: boolean | null
|
|
25
|
+
/** 支撑边/证据的人类可读摘要(进审批卡) */
|
|
26
|
+
evidence: string[]
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export interface IdentifiabilityInputSummary {
|
|
30
|
+
verdict: string
|
|
31
|
+
effect?: number | null
|
|
32
|
+
ciLow?: number | null
|
|
33
|
+
ciHigh?: number | null
|
|
34
|
+
mde?: number | null
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export interface ScientificPayload {
|
|
38
|
+
controlNodeId: string
|
|
39
|
+
targetNodeId: string
|
|
40
|
+
proposedDelta: number
|
|
41
|
+
/** 模型侧预测的稳态变化(物理单位;unknown → null) */
|
|
42
|
+
modelEffect: number | null
|
|
43
|
+
modelConverged: boolean
|
|
44
|
+
ontologyHasCouplingPath: boolean | null
|
|
45
|
+
identifiabilityVerdict: string | null
|
|
46
|
+
effectEstimate: number | null
|
|
47
|
+
ciLow: number | null
|
|
48
|
+
ciHigh: number | null
|
|
49
|
+
mde: number | null
|
|
50
|
+
actionCoverage: Pick<ActionCoverage, 'distinctLevels' | 'collinearityWithTime' | 'monolithicSequence'> | null
|
|
51
|
+
evidenceEdges: string[]
|
|
52
|
+
/** 该结论的可证伪方式(机器可读 + 人读) */
|
|
53
|
+
falsificationMethod: string
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export type CrossCheckDecision = 'allow' | 'allow_with_warning' | 'require_human' | 'reject'
|
|
57
|
+
|
|
58
|
+
export interface CrossCheckResult {
|
|
59
|
+
decision: CrossCheckDecision
|
|
60
|
+
conflicts: string[]
|
|
61
|
+
warnings: string[]
|
|
62
|
+
payload: ScientificPayload
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export interface CrossCheckInput {
|
|
66
|
+
controlNodeId: string
|
|
67
|
+
targetNodeId: string
|
|
68
|
+
proposedDelta: number
|
|
69
|
+
/** 自动模式下冲突/需人审是否直接拒(auto=true 时 require_human → reject) */
|
|
70
|
+
auto: boolean
|
|
71
|
+
model?: ModelChannelInput
|
|
72
|
+
ontology?: OntologyChannelInput
|
|
73
|
+
identifiability?: IdentifiabilityInputSummary
|
|
74
|
+
actionCoverage?: ActionCoverage
|
|
75
|
+
/** 判定"有效应"的增益下限(物理单位/单位Δ);缺省 1e-9 */
|
|
76
|
+
minGain?: number
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* 三值互审判定(纯函数)。冲突判据:
|
|
81
|
+
* - 模型通道:converged 且 |gain×Δ| > minGain → 认为模型预测"有效应";
|
|
82
|
+
* 否则(收敛但增益≈0)→ 预测"无效应";未收敛/无模型 → unknown(不参与冲突)
|
|
83
|
+
* - 本体通道:hasCouplingPath true/false/null
|
|
84
|
+
* 只有 (有效应 & 明确无路径) 或 (无效应 & 明确有路径) 才 conflict。
|
|
85
|
+
*/
|
|
86
|
+
export function evaluateCrossCheck(input: CrossCheckInput): CrossCheckResult {
|
|
87
|
+
const minGain = input.minGain ?? 1e-9
|
|
88
|
+
const conflicts: string[] = []
|
|
89
|
+
const warnings: string[] = []
|
|
90
|
+
|
|
91
|
+
let modelEffect: number | null = null
|
|
92
|
+
let modelConverged = false
|
|
93
|
+
let modelHasEffect: boolean | null = null
|
|
94
|
+
if (input.model?.artifact) {
|
|
95
|
+
const sensitivity = arxStepResponseGain(input.model.artifact, input.controlNodeId)
|
|
96
|
+
if (sensitivity) {
|
|
97
|
+
modelConverged = sensitivity.converged
|
|
98
|
+
if (sensitivity.converged) {
|
|
99
|
+
const gain = sensitivity.gains[input.model.targetNodeId]
|
|
100
|
+
if (typeof gain === 'number' && Number.isFinite(gain)) {
|
|
101
|
+
modelEffect = gain * input.proposedDelta
|
|
102
|
+
modelHasEffect = Math.abs(gain) > minGain
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
const onto = input.ontology ?? { hasCouplingPath: null, evidence: [] }
|
|
109
|
+
if (modelHasEffect === true && onto.hasCouplingPath === false) {
|
|
110
|
+
conflicts.push(`模型预测有效应(Δy≈${modelEffect?.toPrecision(4)})但本体明确断言 ${input.controlNodeId}→${input.targetNodeId} 无耦合路径`)
|
|
111
|
+
}
|
|
112
|
+
if (modelHasEffect === false && onto.hasCouplingPath === true) {
|
|
113
|
+
conflicts.push(`模型预测无可分辨效应但本体断言存在耦合路径(${onto.evidence[0] ?? '无证据摘要'}):模型可能未学到该动作维度,先查 G6 动作覆盖`)
|
|
114
|
+
}
|
|
115
|
+
if (input.model?.uq && !input.model.uq.accepted) {
|
|
116
|
+
warnings.push(`模型 UQ/OOD 未通过(${input.model.uq.rejectCode ?? 'unknown'}):预测不可作为下发依据`)
|
|
117
|
+
if (input.auto) conflicts.push('UQ/OOD 未通过,自动模式拒绝;请转人工审批或先补充标定')
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
const v = input.identifiability
|
|
121
|
+
if (v && (v.verdict === 'UNDERPOWERED' || v.verdict === 'CONFOUNDED')) {
|
|
122
|
+
warnings.push(`可辨识性 ${v.verdict}:当前步幅/窗口不足以分辨效应${v.mde != null ? `(MDE=${v.mde.toPrecision(3)})` : ''};卡片请写明"不构成可分辨干预"`)
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
const coverage = input.actionCoverage
|
|
126
|
+
const payload: ScientificPayload = {
|
|
127
|
+
controlNodeId: input.controlNodeId,
|
|
128
|
+
targetNodeId: input.targetNodeId,
|
|
129
|
+
proposedDelta: input.proposedDelta,
|
|
130
|
+
modelEffect,
|
|
131
|
+
modelConverged,
|
|
132
|
+
ontologyHasCouplingPath: onto.hasCouplingPath,
|
|
133
|
+
identifiabilityVerdict: v?.verdict ?? null,
|
|
134
|
+
effectEstimate: v?.effect ?? null,
|
|
135
|
+
ciLow: v?.ciLow ?? null,
|
|
136
|
+
ciHigh: v?.ciHigh ?? null,
|
|
137
|
+
mde: v?.mde ?? null,
|
|
138
|
+
actionCoverage: coverage
|
|
139
|
+
? { distinctLevels: coverage.distinctLevels, collinearityWithTime: coverage.collinearityWithTime, monolithicSequence: coverage.monolithicSequence }
|
|
140
|
+
: null,
|
|
141
|
+
evidenceEdges: onto.evidence,
|
|
142
|
+
falsificationMethod: buildFalsificationMethod(input, modelHasEffect),
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
let decision: CrossCheckDecision
|
|
146
|
+
if (conflicts.length > 0) decision = input.auto ? 'reject' : 'require_human'
|
|
147
|
+
else if (warnings.length > 0) decision = input.auto ? 'require_human' : 'allow_with_warning'
|
|
148
|
+
else decision = 'allow'
|
|
149
|
+
if (decision === 'require_human' && input.auto) decision = 'reject'
|
|
150
|
+
|
|
151
|
+
return { decision, conflicts, warnings, payload }
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/** 可证伪方式:写清楚"什么结果会推翻这次下发" */
|
|
155
|
+
export function buildFalsificationMethod(input: CrossCheckInput, modelHasEffect: boolean | null): string {
|
|
156
|
+
const delta = input.proposedDelta
|
|
157
|
+
const parts = [
|
|
158
|
+
`若响应窗(≥3 个主导扰动周期)内 ${input.targetNodeId} 的变化量在 95% CI 内不含 0 且方向与模型预测(${modelHasEffect === true ? '有' : modelHasEffect === false ? '无' : '未知'}效应)不一致,则本次因果断言被否证`,
|
|
159
|
+
`比较基准 = 干预前同长窗口;置信区间用 bootstrap(种子固定可复现)`,
|
|
160
|
+
`Δ控制=${delta} 的效应若小于 MDE,结论只能记为"不可辨识",不得外推`,
|
|
161
|
+
]
|
|
162
|
+
if (input.ontology?.hasCouplingPath === false) parts.push('本体无耦合断言与实测有效应冲突时,以实测为准并回灌本体证据(需人工确认版本)')
|
|
163
|
+
return parts.join(';')
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/** 审批卡人读段落(与 payload 同源;detail 文本 + 结构化载荷双通道) */
|
|
167
|
+
export function scientificPayloadLines(payload: ScientificPayload): string[] {
|
|
168
|
+
const fmt = (x: number | null): string => (x != null && Number.isFinite(x) ? x.toPrecision(4) : '—')
|
|
169
|
+
return [
|
|
170
|
+
`[科学依据] 模型预测:${payload.modelEffect == null ? '无可用模型(unknown)' : `Δy≈${fmt(payload.modelEffect)}${payload.modelConverged ? '' : '(未收敛)'}`}`,
|
|
171
|
+
`[科学依据] 本体耦合:${payload.ontologyHasCouplingPath == null ? '未声明' : payload.ontologyHasCouplingPath ? `存在路径(${payload.evidenceEdges.slice(0, 2).join(' / ') || '无证据摘要'})` : '明确无耦合路径'}`,
|
|
172
|
+
`[科学依据] 可辨识性:${payload.identifiabilityVerdict ?? '未评估'}${payload.mde != null ? `;MDE=${fmt(payload.mde)}` : ''}${payload.effectEstimate != null ? `;上次效应 ${fmt(payload.effectEstimate)} CI[${fmt(payload.ciLow)}, ${fmt(payload.ciHigh)}]` : ''}`,
|
|
173
|
+
payload.actionCoverage ? `[科学依据] 动作覆盖:水平 ${payload.actionCoverage.distinctLevels} 个,时间共线 |r|=${payload.actionCoverage.collinearityWithTime.toFixed(3)}${payload.actionCoverage.monolithicSequence ? '(纯阶梯,与时间不可分)' : ''}` : null,
|
|
174
|
+
`[可证伪] ${payload.falsificationMethod}`,
|
|
175
|
+
].filter((x): x is string => x != null)
|
|
176
|
+
}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
*
|
|
7
7
|
* 契约成员:
|
|
8
8
|
* drainFrames → 由 frames.ts 实现
|
|
9
|
+
* daqPushRearm → 由 push.ts 实现(R-2:driverConfig 变更清退避+重建订阅)
|
|
9
10
|
* emitController → 由 views.ts 实现
|
|
10
11
|
* emitNodeChanged → 由 views.ts 实现
|
|
11
12
|
* evictFrames → 由 frames.ts 实现
|
|
@@ -25,6 +26,8 @@ import type { DaqNode } from '../daq-node'
|
|
|
25
26
|
|
|
26
27
|
export abstract class DaqControllerContracts {
|
|
27
28
|
protected abstract drainFrames(): DaqFrameRow[]
|
|
29
|
+
/** R-2:driverConfig 变更后调用 —— 清该节点推送重试退避并立即对账订阅(对齐轮询路径 rearm 语义) */
|
|
30
|
+
protected abstract daqPushRearm(nodeId: string): void
|
|
28
31
|
protected abstract emitController(): void
|
|
29
32
|
protected abstract emitNodeChanged(op: AepDaqNodeChange['op'], node: DaqNode | null): void
|
|
30
33
|
protected abstract evictFrames(keepLast: number): number
|
|
@@ -63,7 +63,11 @@ export abstract class DaqControllerCrud extends DaqControllerRuntimeControl {
|
|
|
63
63
|
if (patch.driver !== undefined) node.driver = requireDriverKind(patch.driver)
|
|
64
64
|
// P0-2(2026-10-28 审查):GET 投影的 `******` 可能是整包 PATCH 回来的回显,
|
|
65
65
|
// 入口单点剔除,绝不让掩码覆盖真实凭据(新明文照常写入)。
|
|
66
|
-
|
|
66
|
+
let driverConfigChanged = false
|
|
67
|
+
if (patch.driverConfig !== undefined) {
|
|
68
|
+
node.driverConfig = { ...node.driverConfig, ...stripMaskedSecrets(patch.driverConfig) }
|
|
69
|
+
driverConfigChanged = true
|
|
70
|
+
}
|
|
67
71
|
if (patch.transform !== undefined) {
|
|
68
72
|
if (patch.transform.kind === 'linear' && (!Number.isFinite(Number(patch.transform.scale)) || Number(patch.transform.scale) === 0)) {
|
|
69
73
|
throw new AppError(400, ErrorCodes.VALIDATION_ERROR, '标定系数 scale 必须为非零数字(物理值 = scale × PLC值 + offset)')
|
|
@@ -95,7 +99,13 @@ export abstract class DaqControllerCrud extends DaqControllerRuntimeControl {
|
|
|
95
99
|
rearm = true
|
|
96
100
|
}
|
|
97
101
|
if (rearm) this.runtimes.get(id)?.rearm() // 元数据变更即刻生效(独立运行时节拍重置)
|
|
98
|
-
|
|
102
|
+
// R-2(2026-11-01):driverConfig 变更与轮询路径 rearm 对齐 —— 清推送订阅重试
|
|
103
|
+
// 退避并即刻对账订阅。旧行为:退避(map 值)跨 driverConfig 变更存续,broker
|
|
104
|
+
// 长时间死亡后修好配置仍要等满退避窗(实测"Mqtt 拒连后修配置必须重建节点");
|
|
105
|
+
// 现在改配置 = 立即放弃旧退避,下一拍 syncPushBindings 按新指纹重建订阅;
|
|
106
|
+
// 同时驱逐该 broker 的死连接(池条目在 broker 长期死亡后可能处于僵尸态,
|
|
107
|
+
// mqtt.js 重连循环不再推进 —— 驱逐让下一次订阅全新建连)。
|
|
108
|
+
if (driverConfigChanged) this.daqPushRearm(id)
|
|
99
109
|
if (patch.posZ !== undefined) node.posZ = patch.posZ
|
|
100
110
|
if (patch.lineId !== undefined) {
|
|
101
111
|
const lid = String(patch.lineId)
|
|
@@ -196,6 +196,28 @@ export abstract class DaqControllerPush extends DaqControllerState {
|
|
|
196
196
|
catch { /* 已停 */ }
|
|
197
197
|
}
|
|
198
198
|
|
|
199
|
+
/** R-2(2026-11-01):driverConfig 变更 → 清退避 + 回收订阅,下一拍按新指纹重建。
|
|
200
|
+
* 与轮询路径 PATCH→rearm 语义对齐:改配置 = 立即放弃旧退避,绝不"修好配置还要
|
|
201
|
+
* 等满退避窗"(实测 broker 长期死亡后修正 endpoint,热修被迫重建节点)。 */
|
|
202
|
+
protected daqPushRearm(nodeId: string): void {
|
|
203
|
+
this.pushRetryAt.delete(nodeId)
|
|
204
|
+
void this.stopPushBinding(nodeId)
|
|
205
|
+
// 死连接驱逐:broker 长期死亡后池内条目可能处于僵尸态(mqtt.js 重连循环不再推进
|
|
206
|
+
// 且永不自愈,实测"重建节点才恢复"的真实根因)。这里按节点当前 broker 键驱逐,
|
|
207
|
+
// 下一次订阅(本拍 syncPushBindings)全新建连,彻底摆脱僵尸条目。
|
|
208
|
+
try {
|
|
209
|
+
const node = this.repo.byId(nodeId)
|
|
210
|
+
const drv = node ? resolveDaqDriver(node.driver) : null
|
|
211
|
+
if (node && drv && typeof drv.evictPoolConn === 'function') drv.evictPoolConn(node.driverConfig ?? {})
|
|
212
|
+
}
|
|
213
|
+
catch { /* 驱逐失败不阻断对账:退避已清,退避窗后自然重试 */ }
|
|
214
|
+
// 立即对账一次(不等 250ms 扫描):改配置即刻生效的最后一环。
|
|
215
|
+
try {
|
|
216
|
+
this.syncPushBindings()
|
|
217
|
+
}
|
|
218
|
+
catch { /* 对账异常由 sweep 的 guardStep 兜底 */ }
|
|
219
|
+
}
|
|
220
|
+
|
|
199
221
|
/** 停止全部订阅(网关停止/进程退出) */
|
|
200
222
|
async stopAllPushBindings(): Promise<void> {
|
|
201
223
|
const ids = [...this.pushBindings.keys()]
|
|
@@ -128,6 +128,29 @@ function brokerUrl(cfg: Record<string, unknown>): string {
|
|
|
128
128
|
return `mqtt${secure ? 's' : ''}://${String(cfg.host)}:${Number(cfg.port ?? 1883)}`
|
|
129
129
|
}
|
|
130
130
|
|
|
131
|
+
/** R-2(2026-11-01):按配置驱逐池内连接(尽力而为)。
|
|
132
|
+
* broker 长期死亡后,池内条目可能处于僵尸态:mqtt.js 重连循环不再推进、connected 恒
|
|
133
|
+
* false、节点侧每次订阅快速失败 —— 此前唯一的恢复手段是重建节点(整条订阅随新节点
|
|
134
|
+
* 全新建连)。这里主动 end(true) 并从池移除,下一次订阅全新建连,热修 endpoint 即刻生效。
|
|
135
|
+
* 仅驱逐"当前未连接"的条目:连接健康的条目绝不碰(不影响其他共享该 broker 的节点)。 */
|
|
136
|
+
export function evictMqttPoolConn(cfg: Record<string, unknown>): boolean {
|
|
137
|
+
try {
|
|
138
|
+
const key = safeMqttKey(cfg)
|
|
139
|
+
const conn = mqttPool.get(key)
|
|
140
|
+
if (!conn) return false
|
|
141
|
+
if (conn.connected) return false // 健康连接不驱逐
|
|
142
|
+
mqttPool.delete(key)
|
|
143
|
+
try {
|
|
144
|
+
conn.client.end(true)
|
|
145
|
+
}
|
|
146
|
+
catch { /* 已死 */ }
|
|
147
|
+
return true
|
|
148
|
+
}
|
|
149
|
+
catch {
|
|
150
|
+
return false
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
|
|
131
154
|
/** 订阅单 topic(SUBACK 等待;5s 超时;重连时由 connect 事件重放) */
|
|
132
155
|
async function subscribeTopic(conn: MqttConn, topic: string, qos: number): Promise<void> {
|
|
133
156
|
await new Promise<void>((resolve, reject) => {
|
|
@@ -457,6 +480,11 @@ export const mqttDaqDriver: DaqDriver = {
|
|
|
457
480
|
return `${safeMqttKey(c)}|topic=${String(c.topic ?? '')}|qos=${Number(c.qos ?? 1)}|${decode}`
|
|
458
481
|
},
|
|
459
482
|
|
|
483
|
+
/** R-2:驱逐未连接的僵尸池条目(健康连接绝不碰);修复配置后下次订阅全新建连 */
|
|
484
|
+
evictPoolConn(driverConfig) {
|
|
485
|
+
return evictMqttPoolConn(driverConfig)
|
|
486
|
+
},
|
|
487
|
+
|
|
460
488
|
async sample({ driverConfig, signalKind, ctx }) {
|
|
461
489
|
const topic = String(driverConfig.topic ?? '')
|
|
462
490
|
if (!topic) throw new Error('缺少主题 topic')
|
|
@@ -89,4 +89,10 @@ export interface DaqDriver {
|
|
|
89
89
|
* 避免改密码/换主题后仍挂在旧连接上。缺省由控制器按常见字段拼一个保守指纹。
|
|
90
90
|
*/
|
|
91
91
|
fingerprint?(driverConfig: Record<string, unknown>): string
|
|
92
|
+
/**
|
|
93
|
+
* 可选:按 driverConfig 驱逐池内死连接(R-2)。控制器在 driverConfig 变更后调用,
|
|
94
|
+
* 让"broker 长期死亡后修好配置"立即全新建连,不必重建节点。实现应只驱逐未连接的
|
|
95
|
+
* 僵尸条目(健康连接绝不碰),无池化驱动的实现可不提供。
|
|
96
|
+
*/
|
|
97
|
+
evictPoolConn?(driverConfig: Record<string, unknown>): boolean
|
|
92
98
|
}
|
|
@@ -88,6 +88,8 @@ export function initWorkshopDb(db: DatabaseSync): void {
|
|
|
88
88
|
migrateAgentTokenGraceColumns(db)
|
|
89
89
|
// v33(2026-10-28):频道执行模式列(observe/manual/auto;NULL 按 auto 中性生效,零行为变化)
|
|
90
90
|
migrateChannelExecutionModeColumn(db)
|
|
91
|
+
// P3-4(2026-11-01):steer 失败重投上限 —— messages.attempts 列(重投 +1,≥3 → dead)
|
|
92
|
+
migrateAddColumn(db, 'messages', 'attempts', 'INTEGER NOT NULL DEFAULT 0')
|
|
91
93
|
// v32(ONT):Profile 冻结本体引用摘要(缺省 [] = 无本体约束域;只前滚,不回填)
|
|
92
94
|
migrateAddColumn(db, 'optimizer_profiles', 'ontology_refs_json', 'TEXT NOT NULL DEFAULT \'[]\'')
|
|
93
95
|
seedDefaultWorkshopData(db)
|
|
@@ -289,7 +289,10 @@ export interface MessageRow {
|
|
|
289
289
|
role: string
|
|
290
290
|
partsJson: string
|
|
291
291
|
metadataJson: string
|
|
292
|
-
|
|
292
|
+
/** P3-4:'dead' = 重投次数达上限(3),永不再投递(审计可见) */
|
|
293
|
+
state: 'pending' | 'consuming' | 'consumed' | 'dead'
|
|
294
|
+
/** P3-4:steer 失败重投计数(requeue 时 +1) */
|
|
295
|
+
attempts: number
|
|
293
296
|
createdAt: string
|
|
294
297
|
consumedAt: string | null
|
|
295
298
|
}
|
|
@@ -53,7 +53,8 @@ CREATE TABLE IF NOT EXISTS messages (
|
|
|
53
53
|
role TEXT NOT NULL, -- 'ROLE_USER' | 'ROLE_AGENT'
|
|
54
54
|
parts_json TEXT NOT NULL,
|
|
55
55
|
metadata_json TEXT NOT NULL DEFAULT '{}', -- x-aw-target-agent / x-aw-task-kind
|
|
56
|
-
state TEXT NOT NULL DEFAULT 'pending', -- pending|consuming|consumed
|
|
56
|
+
state TEXT NOT NULL DEFAULT 'pending', -- pending|consuming|consumed|dead(P3-4:重投达上限)
|
|
57
|
+
attempts INTEGER NOT NULL DEFAULT 0, -- P3-4:steer 失败重投计数(requeue +1)
|
|
57
58
|
created_at TEXT NOT NULL,
|
|
58
59
|
consumed_at TEXT
|
|
59
60
|
);
|
|
@@ -1183,7 +1184,42 @@ CREATE TABLE IF NOT EXISTS ontology_rule_traces (
|
|
|
1183
1184
|
row_hash TEXT NOT NULL DEFAULT '',
|
|
1184
1185
|
created_at TEXT NOT NULL
|
|
1185
1186
|
);
|
|
1186
|
-
CREATE INDEX IF NOT EXISTS idx_ontology_traces_version ON ontology_rule_traces(ontology_id, version, created_at DESC)
|
|
1187
|
+
CREATE INDEX IF NOT EXISTS idx_ontology_traces_version ON ontology_rule_traces(ontology_id, version, created_at DESC);
|
|
1188
|
+
|
|
1189
|
+
-- v34(科学探索计划 P2,2026-11-02):干预台账 —— 所有治理下发(manual/agent/recipe/rollback)
|
|
1190
|
+
-- 在 dcw write() 唯一咽喉单点入册,一行一次真实下发;verdict 由 aml/identifiability 引擎回填。
|
|
1191
|
+
-- 拒绝路径沿 recordOps 审计(dcw.write.rejected),不入本表(只记已受理下发)。
|
|
1192
|
+
CREATE TABLE IF NOT EXISTS intervention_events (
|
|
1193
|
+
id TEXT PRIMARY KEY,
|
|
1194
|
+
ts TEXT NOT NULL, -- 下发受理时刻(ISO)
|
|
1195
|
+
line_id TEXT NOT NULL DEFAULT '',
|
|
1196
|
+
node_id TEXT NOT NULL,
|
|
1197
|
+
node_name TEXT NOT NULL DEFAULT '',
|
|
1198
|
+
from_value REAL,
|
|
1199
|
+
to_value REAL,
|
|
1200
|
+
actual_value REAL, -- 回读证实值(readback-verified 时)
|
|
1201
|
+
ack TEXT NOT NULL DEFAULT '', -- readback-verified|transport-ack|unverified
|
|
1202
|
+
path TEXT NOT NULL DEFAULT '', -- manual|agent|recipe|rollback
|
|
1203
|
+
actor TEXT NOT NULL DEFAULT '',
|
|
1204
|
+
actor_name TEXT NOT NULL DEFAULT '',
|
|
1205
|
+
channel_id TEXT NOT NULL DEFAULT '',
|
|
1206
|
+
approval_id TEXT,
|
|
1207
|
+
recipe_run_id TEXT,
|
|
1208
|
+
hypothesis TEXT NOT NULL DEFAULT '',
|
|
1209
|
+
target_node_id TEXT, -- 判读目标(带判读上下文的路径写入)
|
|
1210
|
+
criterion_json TEXT, -- {metric, op, threshold, mde} 机器可读判据
|
|
1211
|
+
settle_ms INTEGER, -- 判读窗长
|
|
1212
|
+
verdict TEXT NOT NULL DEFAULT 'pending', -- pending|unassessed|identifiable_effect|no_resolvable_effect|underpowered|confounded
|
|
1213
|
+
effect REAL,
|
|
1214
|
+
ci_low REAL,
|
|
1215
|
+
ci_high REAL,
|
|
1216
|
+
mde REAL,
|
|
1217
|
+
verdict_json TEXT,
|
|
1218
|
+
created_at TEXT NOT NULL,
|
|
1219
|
+
updated_at TEXT NOT NULL
|
|
1220
|
+
);
|
|
1221
|
+
CREATE INDEX IF NOT EXISTS idx_intervention_events_node ON intervention_events(node_id, ts DESC);
|
|
1222
|
+
CREATE INDEX IF NOT EXISTS idx_intervention_events_line ON intervention_events(line_id, ts DESC);`
|
|
1187
1223
|
|
|
1188
1224
|
// ===== 默认种子数据(首轮初始化注入;owner NULL = 公共资源,所有登录用户只读共享) =====
|
|
1189
1225
|
|
|
@@ -7,7 +7,7 @@ import type { DatabaseSync } from 'node:sqlite'
|
|
|
7
7
|
import type { MessageRow } from './database'
|
|
8
8
|
|
|
9
9
|
const COLS
|
|
10
|
-
= 'id, channel_id AS channelId, task_id AS taskId, from_agent_id AS fromAgentId, to_agent_id AS toAgentId, role, parts_json AS partsJson, metadata_json AS metadataJson, state, created_at AS createdAt, consumed_at AS consumedAt'
|
|
10
|
+
= 'id, channel_id AS channelId, task_id AS taskId, from_agent_id AS fromAgentId, to_agent_id AS toAgentId, role, parts_json AS partsJson, metadata_json AS metadataJson, state, attempts, created_at AS createdAt, consumed_at AS consumedAt'
|
|
11
11
|
|
|
12
12
|
export interface MessageCreateInput {
|
|
13
13
|
/** 落库 id;缺省生成。A2A 入队时传发送方 messageId,保证 API 返回 id 与历史 id 一致 */
|
|
@@ -43,10 +43,16 @@ export function createMessageRepo(db: DatabaseSync) {
|
|
|
43
43
|
`UPDATE messages SET state = 'consumed', consumed_at = ? WHERE id = ?`,
|
|
44
44
|
)
|
|
45
45
|
const resetConsumingStmt = db.prepare(
|
|
46
|
-
|
|
46
|
+
// P3-4:崩溃恢复重投不复活 dead(重投上限是持久判定,重启不洗白)
|
|
47
|
+
`UPDATE messages SET state = 'pending' WHERE state = 'consuming' AND attempts < 3`,
|
|
47
48
|
)
|
|
48
49
|
const requeueStmt = db.prepare(
|
|
49
|
-
|
|
50
|
+
// P3-4(2026-11-01):重投计数上限 —— attempts+1,达 3 次不再回 pending(→ dead)。
|
|
51
|
+
// steer 对忙碌 Agent 的重投之前无上限:坏消息(解析必炸/超长)会在
|
|
52
|
+
// "认领→steer 失败→回 pending"里无限循环,每 250ms 吃掉一个调度拍。
|
|
53
|
+
`UPDATE messages SET attempts = attempts + 1,
|
|
54
|
+
state = CASE WHEN attempts + 1 >= 3 THEN 'dead' ELSE 'pending' END
|
|
55
|
+
WHERE id = ? AND state = 'consuming'`,
|
|
50
56
|
)
|
|
51
57
|
const consumePendingByTaskStmt = db.prepare(
|
|
52
58
|
`UPDATE messages SET state = 'consumed', consumed_at = ? WHERE task_id = ? AND state = 'pending'`,
|
|
@@ -78,6 +84,7 @@ export function createMessageRepo(db: DatabaseSync) {
|
|
|
78
84
|
partsJson: JSON.stringify(input.parts),
|
|
79
85
|
metadataJson: JSON.stringify(input.metadata ?? {}),
|
|
80
86
|
state: 'pending',
|
|
87
|
+
attempts: 0,
|
|
81
88
|
createdAt: now,
|
|
82
89
|
consumedAt: null,
|
|
83
90
|
}
|
|
@@ -9,6 +9,7 @@ import { emitDcwWrite } from '@/server/services/workshop/plugins/host.mjs'
|
|
|
9
9
|
import { getActiveLineRun } from '../line-run'
|
|
10
10
|
import { opsActorKindOf } from './helpers'
|
|
11
11
|
import { recordOps } from '../../ops/ops'
|
|
12
|
+
import { recordIntervention } from '../../aml/intervention-ledger'
|
|
12
13
|
|
|
13
14
|
/** 同节点写入去重节流表(eng+10s 窗内视为同一次下发的重试回执) */
|
|
14
15
|
export const opsWriteMemo = new Map<string, { eng: number, at: number }>()
|
|
@@ -18,7 +19,7 @@ export function recordDcwWriteOps(args: {
|
|
|
18
19
|
node: { name: string, unit?: string, lineId: string }
|
|
19
20
|
eng: number
|
|
20
21
|
prevValue: number | null
|
|
21
|
-
outcome: { ok: boolean, message: string }
|
|
22
|
+
outcome: { ok: boolean, message: string, ack?: string, readback?: number | null }
|
|
22
23
|
src: DcwWriteSource
|
|
23
24
|
meta?: DcwWriteMeta
|
|
24
25
|
recipeRunId: string | null
|
|
@@ -46,4 +47,23 @@ export function recordDcwWriteOps(args: {
|
|
|
46
47
|
})
|
|
47
48
|
// 插件钩子:写控 ACK 观察(与运维入册同点同去重节流)
|
|
48
49
|
emitDcwWrite({ nodeId: args.id, name: args.node.name, eng: args.eng, prevValue: args.prevValue, ok: args.outcome.ok, source: args.src, lineId: args.node.lineId ?? '', at: new Date().toISOString() })
|
|
50
|
+
// v34 干预台账(科学探索计划 P2):全路径单点入册(与运维日志同点同去重节流)。
|
|
51
|
+
// 只记已受理下发;拒绝路径沿上方 recordOps 的 dcw.write.rejected 审计,不入台账。
|
|
52
|
+
// recordIntervention 内部自吞异常(台账失败绝不改变写结果语义)。
|
|
53
|
+
recordIntervention({
|
|
54
|
+
nodeId: args.id,
|
|
55
|
+
nodeName: args.node.name,
|
|
56
|
+
lineId: args.node.lineId ?? '',
|
|
57
|
+
fromValue: args.prevValue,
|
|
58
|
+
toValue: args.eng,
|
|
59
|
+
actualValue: args.outcome.readback != null && Number.isFinite(Number(args.outcome.readback)) ? Number(args.outcome.readback) : null,
|
|
60
|
+
ack: args.outcome.ack ?? '',
|
|
61
|
+
path: args.src,
|
|
62
|
+
actor: args.meta?.actor ?? 'user',
|
|
63
|
+
actorName: args.meta?.actorName ?? '',
|
|
64
|
+
channelId: args.meta?.channelId ?? '',
|
|
65
|
+
approvalId: args.meta?.approvalId ?? null,
|
|
66
|
+
recipeRunId: args.recipeRunId,
|
|
67
|
+
hypothesis: args.meta?.hypothesis ?? '',
|
|
68
|
+
})
|
|
49
69
|
}
|