agentworkshop 0.8.1 → 0.8.3

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.
Files changed (1563) hide show
  1. package/.output/.AgentWorkShop/aml-python/train-example.py +92 -92
  2. package/.output/nitro.json +1 -1
  3. package/.output/public/_nuxt/{BCLUwdP52.js → 39W1CH-l2.js} +1 -1
  4. package/.output/public/_nuxt/7xbYPfY6.js +1 -0
  5. package/.output/public/_nuxt/{BfvuWqSa.js → ATAvN55g.js} +1 -1
  6. package/.output/public/_nuxt/{B2NbzUau2.js → B3eCVqcT2.js} +1 -1
  7. package/.output/public/_nuxt/{DuUc4bbY2.js → B9qIhT7k2.js} +1 -1
  8. package/.output/public/_nuxt/{BkEokGX5.js → BE9oKpOt.js} +1 -1
  9. package/.output/public/_nuxt/{D_59BNP1.js → Bbk1XCCM.js} +3 -3
  10. package/.output/public/_nuxt/{Dz9C2pTa.js → CMzExk8F.js} +1 -1
  11. package/.output/public/_nuxt/{dHwWyr6b.js → CT4bi_Y4.js} +1 -1
  12. package/.output/public/_nuxt/{26OL4Ao82.js → CeCSjB9O2.js} +1 -1
  13. package/.output/public/_nuxt/{Dyxf2xZw.js → Cot5VNae.js} +1 -1
  14. package/.output/public/_nuxt/{BVg2R2VB2.js → Crf8_Ad02.js} +1 -1
  15. package/.output/public/_nuxt/{rDvMijKA.js → D9tNM-1a.js} +2 -2
  16. package/.output/public/_nuxt/{YAA98rWJ.js → DAug2CPf.js} +7 -7
  17. package/.output/public/_nuxt/{CQSxS_Ek.js → DbhTN7-T.js} +1 -1
  18. package/.output/public/_nuxt/DgGzwjAr2.js +2 -0
  19. package/.output/public/_nuxt/DkRozlDP2.js +1 -0
  20. package/.output/public/_nuxt/{DGu_fna7.js → DoChWkff.js} +1 -1
  21. package/.output/public/_nuxt/{Byiiiwc72.js → DxH5focQ2.js} +1 -1
  22. package/.output/public/_nuxt/Dyr3LPGL.js +1 -0
  23. package/.output/public/_nuxt/{CC2Pv8VL2.js → MC_i34H42.js} +1 -1
  24. package/.output/public/_nuxt/OmpTerminalPanel.DMWgGwDs.css +1 -0
  25. package/.output/public/_nuxt/PluginSlot.BqBzLD4T.css +1 -0
  26. package/.output/public/_nuxt/TownView.Cn8SPG7S.css +1 -0
  27. package/.output/public/_nuxt/{CmuGMxDP.js → TugRY_4O.js} +1 -1
  28. package/.output/public/_nuxt/{BPUQZ9Lq2.js → WybiLTow2.js} +1 -1
  29. package/.output/public/_nuxt/{BaYDgyaR.js → Zn0BZpf0.js} +3 -3
  30. package/.output/public/_nuxt/{_id_.BQRWK7J2.css → _id_.Be5JaH-P.css} +1 -1
  31. package/.output/public/_nuxt/{_wsId_.DCnKQQdY.css → _wsId_.p_vAYtTp.css} +1 -1
  32. package/.output/public/_nuxt/{agents.D-JPovTZ.css → agents.CRomddYR.css} +1 -1
  33. package/.output/public/_nuxt/aml.DgOMpDpv.css +1 -0
  34. package/.output/public/_nuxt/builds/latest.json +1 -1
  35. package/.output/public/_nuxt/builds/meta/fd0033e4-1eaa-42f8-9a04-3132717a703b.json +1 -0
  36. package/.output/public/_nuxt/{default.BEXGWZFQ.css → default.CpAx70gC.css} +1 -1
  37. package/.output/public/_nuxt/{logs.BkJPbR_K.css → logs.DcSvz6vi.css} +1 -1
  38. package/.output/public/_nuxt/{monitor.D3yEqqrv.css → monitor.OoNTwfMJ.css} +1 -1
  39. package/.output/public/_nuxt/{ontology.B_3Wn907.css → ontology.JqJ6PjV1.css} +1 -1
  40. package/.output/public/_nuxt/{operations.-l6u44Ar.css → operations.C48ggFa5.css} +1 -1
  41. package/.output/public/_nuxt/{pages.Cdpm_B-G.css → pages.Dpa28tJW.css} +1 -1
  42. package/.output/public/_nuxt/permissions.CrV-4t-6.css +1 -0
  43. package/.output/public/_nuxt/{BfeXib9G.js → rcdmiszh2.js} +1 -1
  44. package/.output/public/_nuxt/schedules.DYWOjGHm.css +1 -0
  45. package/.output/public/_nuxt/{teams.CLQaXno5.css → teams.DEJoJ4QV.css} +1 -1
  46. package/.output/public/_nuxt/{tokens.BDSUWF-L.css → tokens.DKZWCP5v.css} +1 -1
  47. package/.output/public/_nuxt/tools.DP-nsTli.css +1 -0
  48. package/.output/public/_nuxt/wK6Pp4Zc2.js +2 -0
  49. package/.output/public/_nuxt/{workshop.BBiFhXuM.css → workshop.PT1xhP8C.css} +1 -1
  50. package/.output/public/favicon.svg +14 -14
  51. package/.output/public/robots.txt +3 -3
  52. package/.output/server/chunks/_/LeftOutlined.mjs.map +1 -1
  53. package/.output/server/chunks/_/RightOutlined.mjs.map +1 -1
  54. package/.output/server/chunks/_/SearchOutlined.mjs +1230 -1261
  55. package/.output/server/chunks/_/SearchOutlined.mjs.map +1 -1
  56. package/.output/server/chunks/_/error-500.mjs.map +1 -1
  57. package/.output/server/chunks/_/nitro.mjs +3308 -3389
  58. package/.output/server/chunks/_/nitro.mjs.map +1 -1
  59. package/.output/server/chunks/build/AuthGate-G74Wr5IV.mjs +704 -0
  60. package/.output/server/chunks/build/AuthGate-G74Wr5IV.mjs.map +1 -0
  61. package/.output/server/chunks/build/FormItemContext-DmuQqaeJ.mjs +77 -0
  62. package/.output/server/chunks/build/FormItemContext-DmuQqaeJ.mjs.map +1 -0
  63. package/.output/server/chunks/build/OmpTerminalPanel-5cB-78zp.mjs +889 -0
  64. package/.output/server/chunks/build/OmpTerminalPanel-5cB-78zp.mjs.map +1 -0
  65. package/.output/server/chunks/build/PluginSlot-CZlGlRoR.mjs +131 -0
  66. package/.output/server/chunks/build/PluginSlot-CZlGlRoR.mjs.map +1 -0
  67. package/.output/server/chunks/build/TownView-CUbzOT_M.mjs +5960 -0
  68. package/.output/server/chunks/build/TownView-CUbzOT_M.mjs.map +1 -0
  69. package/.output/server/chunks/build/_id_-BHWZiRQZ.mjs +373 -0
  70. package/.output/server/chunks/build/_id_-BHWZiRQZ.mjs.map +1 -0
  71. package/.output/server/chunks/build/_id_-JaGx0yBE.mjs +1922 -0
  72. package/.output/server/chunks/build/_id_-JaGx0yBE.mjs.map +1 -0
  73. package/.output/server/chunks/build/_wsId_-C4DKkEqv.mjs +13707 -0
  74. package/.output/server/chunks/build/_wsId_-C4DKkEqv.mjs.map +1 -0
  75. package/.output/server/chunks/build/agents-DRod4lTC.mjs +1047 -0
  76. package/.output/server/chunks/build/agents-DRod4lTC.mjs.map +1 -0
  77. package/.output/server/chunks/build/alert-CNGhs--Y.mjs +260 -0
  78. package/.output/server/chunks/build/alert-CNGhs--Y.mjs.map +1 -0
  79. package/.output/server/chunks/build/aml-B3Umz4DR.mjs +729 -0
  80. package/.output/server/chunks/build/aml-B3Umz4DR.mjs.map +1 -0
  81. package/.output/server/chunks/build/analysis-tNpFLtMt.mjs +502 -0
  82. package/.output/server/chunks/build/analysis-tNpFLtMt.mjs.map +1 -0
  83. package/.output/server/chunks/build/{api-B4Om0mEc.mjs → api-D-zkgkj-.mjs} +8 -10
  84. package/.output/server/chunks/build/api-D-zkgkj-.mjs.map +1 -0
  85. package/.output/server/chunks/build/{api-BsAgXWxi.mjs → api-D3gy2e2q.mjs} +22 -24
  86. package/.output/server/chunks/build/api-D3gy2e2q.mjs.map +1 -0
  87. package/.output/server/chunks/build/{api-BEW_ebY_.mjs → api-bn4OKkl_.mjs} +17 -19
  88. package/.output/server/chunks/build/api-bn4OKkl_.mjs.map +1 -0
  89. package/.output/server/chunks/build/api-error-CnW_xiNI.mjs +46 -0
  90. package/.output/server/chunks/build/api-error-CnW_xiNI.mjs.map +1 -0
  91. package/.output/server/chunks/build/apiClient-DIXx9sfD.mjs +70 -0
  92. package/.output/server/chunks/build/apiClient-DIXx9sfD.mjs.map +1 -0
  93. package/.output/server/chunks/build/board-B2oYXGBy.mjs +172 -0
  94. package/.output/server/chunks/build/board-B2oYXGBy.mjs.map +1 -0
  95. package/.output/server/chunks/build/builtin-catalog-edpDcgfL.mjs +81 -94
  96. package/.output/server/chunks/build/builtin-catalog-edpDcgfL.mjs.map +1 -1
  97. package/.output/server/chunks/build/card-BECE6y_G.mjs +922 -0
  98. package/.output/server/chunks/build/card-BECE6y_G.mjs.map +1 -0
  99. package/.output/server/chunks/build/channel-templates-R2TInv8B.mjs +950 -0
  100. package/.output/server/chunks/build/channel-templates-R2TInv8B.mjs.map +1 -0
  101. package/.output/server/chunks/build/chart-trend-BWeZh5Lv.mjs +113 -112
  102. package/.output/server/chunks/build/chart-trend-BWeZh5Lv.mjs.map +1 -1
  103. package/.output/server/chunks/build/checkbox-C6xY5uc6.mjs +429 -0
  104. package/.output/server/chunks/build/checkbox-C6xY5uc6.mjs.map +1 -0
  105. package/.output/server/chunks/build/client-only-S7k53PIm.mjs +42 -0
  106. package/.output/server/chunks/build/client-only-S7k53PIm.mjs.map +1 -0
  107. package/.output/server/chunks/build/constants-HPHJvjne.mjs +65 -75
  108. package/.output/server/chunks/build/constants-HPHJvjne.mjs.map +1 -1
  109. package/.output/server/chunks/build/core-CRlsQhzd.mjs +292 -0
  110. package/.output/server/chunks/build/core-CRlsQhzd.mjs.map +1 -0
  111. package/.output/server/chunks/build/daq-DHsYtWC-.mjs +1210 -0
  112. package/.output/server/chunks/build/daq-DHsYtWC-.mjs.map +1 -0
  113. package/.output/server/chunks/build/data-Cl4wRZO6.mjs +459 -0
  114. package/.output/server/chunks/build/data-Cl4wRZO6.mjs.map +1 -0
  115. package/.output/server/chunks/build/dcw-DnjOM6p1.mjs +467 -0
  116. package/.output/server/chunks/build/dcw-DnjOM6p1.mjs.map +1 -0
  117. package/.output/server/chunks/build/dcw-driver-badge-Df5wL_ZA.mjs +3 -15
  118. package/.output/server/chunks/build/dcw-driver-badge-Df5wL_ZA.mjs.map +1 -1
  119. package/.output/server/chunks/build/default-DDRKP2Mb.mjs +2246 -0
  120. package/.output/server/chunks/build/default-DDRKP2Mb.mjs.map +1 -0
  121. package/.output/server/chunks/build/descriptions-B3uhDesi.mjs +401 -0
  122. package/.output/server/chunks/build/descriptions-B3uhDesi.mjs.map +1 -0
  123. package/.output/server/chunks/build/drawer-DwXxapMg.mjs +822 -0
  124. package/.output/server/chunks/build/drawer-DwXxapMg.mjs.map +1 -0
  125. package/.output/server/chunks/build/dropdown-DLrGy-Fs.mjs +12 -0
  126. package/.output/server/chunks/build/dropdown-DLrGy-Fs.mjs.map +1 -0
  127. package/.output/server/chunks/build/dropdown-nsGv8Gqx.mjs +530 -0
  128. package/.output/server/chunks/build/dropdown-nsGv8Gqx.mjs.map +1 -0
  129. package/.output/server/chunks/build/{es-Bxu10NJ2.mjs → es-DXSEkmAm.mjs} +1 -2
  130. package/.output/server/chunks/build/es-DXSEkmAm.mjs.map +1 -0
  131. package/.output/server/chunks/build/firstNotUndefined-laiThpLD.mjs +2082 -0
  132. package/.output/server/chunks/build/firstNotUndefined-laiThpLD.mjs.map +1 -0
  133. package/.output/server/chunks/build/form-Cw2Ex9w5.mjs +3543 -0
  134. package/.output/server/chunks/build/form-Cw2Ex9w5.mjs.map +1 -0
  135. package/.output/server/chunks/build/hasIn-RYRGomyg.mjs +192 -0
  136. package/.output/server/chunks/build/hasIn-RYRGomyg.mjs.map +1 -0
  137. package/.output/server/chunks/build/hitl-B4cHRlkC.mjs +120 -0
  138. package/.output/server/chunks/build/hitl-B4cHRlkC.mjs.map +1 -0
  139. package/.output/server/chunks/build/input-CJgB-RL6.mjs +1705 -0
  140. package/.output/server/chunks/build/input-CJgB-RL6.mjs.map +1 -0
  141. package/.output/server/chunks/build/input-number-CQKL42p_.mjs +1027 -0
  142. package/.output/server/chunks/build/input-number-CQKL42p_.mjs.map +1 -0
  143. package/.output/server/chunks/build/interval-DiAUqODq.mjs +8 -0
  144. package/.output/server/chunks/build/interval-DiAUqODq.mjs.map +1 -0
  145. package/.output/server/chunks/build/isNumeric-DQiJ-b15.mjs +6 -0
  146. package/.output/server/chunks/build/isNumeric-DQiJ-b15.mjs.map +1 -0
  147. package/.output/server/chunks/build/logs-C4vKFkHQ.mjs +381 -0
  148. package/.output/server/chunks/build/logs-C4vKFkHQ.mjs.map +1 -0
  149. package/.output/server/chunks/build/menu-xO8ocVtL.mjs +1833 -0
  150. package/.output/server/chunks/build/menu-xO8ocVtL.mjs.map +1 -0
  151. package/.output/server/chunks/build/monitor-BNrG6v3b.mjs +2216 -0
  152. package/.output/server/chunks/build/monitor-BNrG6v3b.mjs.map +1 -0
  153. package/.output/server/chunks/build/narrow-fetch-CcG-BPxc.mjs +0 -2
  154. package/.output/server/chunks/build/narrow-fetch-CcG-BPxc.mjs.map +1 -1
  155. package/.output/server/chunks/build/ontology-B_0Vm6j-.mjs +1416 -0
  156. package/.output/server/chunks/build/ontology-B_0Vm6j-.mjs.map +1 -0
  157. package/.output/server/chunks/build/operations-D8D6-Jm-.mjs +278 -0
  158. package/.output/server/chunks/build/operations-D8D6-Jm-.mjs.map +1 -0
  159. package/.output/server/chunks/build/optimizer-DaTyaY3c.mjs +202 -0
  160. package/.output/server/chunks/build/optimizer-DaTyaY3c.mjs.map +1 -0
  161. package/.output/server/chunks/build/pages-Dac4icQC.mjs +439 -0
  162. package/.output/server/chunks/build/pages-Dac4icQC.mjs.map +1 -0
  163. package/.output/server/chunks/build/pagination-BTzq7dD5.mjs +1330 -0
  164. package/.output/server/chunks/build/pagination-BTzq7dD5.mjs.map +1 -0
  165. package/.output/server/chunks/build/permissions-qmimwB0M.mjs +649 -0
  166. package/.output/server/chunks/build/permissions-qmimwB0M.mjs.map +1 -0
  167. package/.output/server/chunks/build/plugins-Dh_goy-k.mjs +269 -0
  168. package/.output/server/chunks/build/plugins-Dh_goy-k.mjs.map +1 -0
  169. package/.output/server/chunks/build/popconfirm-DuGF7ty-.mjs +333 -0
  170. package/.output/server/chunks/build/popconfirm-DuGF7ty-.mjs.map +1 -0
  171. package/.output/server/chunks/build/responsiveObserve-CzRpNXkr.mjs +77 -0
  172. package/.output/server/chunks/build/responsiveObserve-CzRpNXkr.mjs.map +1 -0
  173. package/.output/server/chunks/build/schedules-C2_x38gj.mjs +7039 -0
  174. package/.output/server/chunks/build/schedules-C2_x38gj.mjs.map +1 -0
  175. package/.output/server/chunks/build/segmented-29uEKZ3D.mjs +332 -0
  176. package/.output/server/chunks/build/segmented-29uEKZ3D.mjs.map +1 -0
  177. package/.output/server/chunks/build/select-CJb2XrQf.mjs +3734 -0
  178. package/.output/server/chunks/build/select-CJb2XrQf.mjs.map +1 -0
  179. package/.output/server/chunks/build/settings-Cz2Plds0.mjs +944 -0
  180. package/.output/server/chunks/build/settings-Cz2Plds0.mjs.map +1 -0
  181. package/.output/server/chunks/build/space-BByD-mFE.mjs +107 -0
  182. package/.output/server/chunks/build/space-BByD-mFE.mjs.map +1 -0
  183. package/.output/server/chunks/build/spin-XhbgGeLP.mjs +313 -0
  184. package/.output/server/chunks/build/spin-XhbgGeLP.mjs.map +1 -0
  185. package/.output/server/chunks/build/studio-CwYXl00G.mjs +329 -0
  186. package/.output/server/chunks/build/studio-CwYXl00G.mjs.map +1 -0
  187. package/.output/server/chunks/build/switch-DWcwVFxW.mjs +374 -0
  188. package/.output/server/chunks/build/switch-DWcwVFxW.mjs.map +1 -0
  189. package/.output/server/chunks/build/table-Zhuo7Fq-.mjs +7249 -0
  190. package/.output/server/chunks/build/table-Zhuo7Fq-.mjs.map +1 -0
  191. package/.output/server/chunks/build/tabs-BCwBXjNt.mjs +1838 -0
  192. package/.output/server/chunks/build/tabs-BCwBXjNt.mjs.map +1 -0
  193. package/.output/server/chunks/build/tag-CRW-anwy.mjs +1010 -0
  194. package/.output/server/chunks/build/tag-CRW-anwy.mjs.map +1 -0
  195. package/.output/server/chunks/build/teams-CwhFdcYn.mjs +1160 -0
  196. package/.output/server/chunks/build/teams-CwhFdcYn.mjs.map +1 -0
  197. package/.output/server/chunks/build/tokens-C5ODO1HA.mjs +992 -0
  198. package/.output/server/chunks/build/tokens-C5ODO1HA.mjs.map +1 -0
  199. package/.output/server/chunks/build/tools-C0YKragH.mjs +487 -0
  200. package/.output/server/chunks/build/tools-C0YKragH.mjs.map +1 -0
  201. package/.output/server/chunks/build/tooltip-GlMrUZzx.mjs +888 -0
  202. package/.output/server/chunks/build/tooltip-GlMrUZzx.mjs.map +1 -0
  203. package/.output/server/chunks/build/town-BV-hbwb5.mjs +16 -29
  204. package/.output/server/chunks/build/town-BV-hbwb5.mjs.map +1 -1
  205. package/.output/server/chunks/build/town-LkDwWnKA.mjs +117 -0
  206. package/.output/server/chunks/build/town-LkDwWnKA.mjs.map +1 -0
  207. package/.output/server/chunks/build/types-D6J7slEa.mjs.map +1 -1
  208. package/.output/server/chunks/build/types-DWqIeMRP.mjs +28 -29
  209. package/.output/server/chunks/build/types-DWqIeMRP.mjs.map +1 -1
  210. package/.output/server/chunks/build/useAgentHarnessOptions-CYKuLtZ2.mjs +120 -0
  211. package/.output/server/chunks/build/useAgentHarnessOptions-CYKuLtZ2.mjs.map +1 -0
  212. package/.output/server/chunks/build/useAgentTemplateActions-Da_V1LSD.mjs +71 -0
  213. package/.output/server/chunks/build/useAgentTemplateActions-Da_V1LSD.mjs.map +1 -0
  214. package/.output/server/chunks/build/useAgentTemplateDialogState-CZzpu5og.mjs +16 -23
  215. package/.output/server/chunks/build/useAgentTemplateDialogState-CZzpu5og.mjs.map +1 -1
  216. package/.output/server/chunks/build/useAgentTemplateForm-BWvax5_E.mjs +112 -0
  217. package/.output/server/chunks/build/useAgentTemplateForm-BWvax5_E.mjs.map +1 -0
  218. package/.output/server/chunks/build/useAgentTemplatesCatalog-BnYjZy59.mjs +140 -0
  219. package/.output/server/chunks/build/useAgentTemplatesCatalog-BnYjZy59.mjs.map +1 -0
  220. package/.output/server/chunks/build/useAmlDatasets-nGi10DAl.mjs +88 -0
  221. package/.output/server/chunks/build/useAmlDatasets-nGi10DAl.mjs.map +1 -0
  222. package/.output/server/chunks/build/useAmlEntities-CTgNAgcZ.mjs +79 -0
  223. package/.output/server/chunks/build/useAmlEntities-CTgNAgcZ.mjs.map +1 -0
  224. package/.output/server/chunks/build/useAmlEnv-Da2TVfyK.mjs +188 -0
  225. package/.output/server/chunks/build/useAmlEnv-Da2TVfyK.mjs.map +1 -0
  226. package/.output/server/chunks/build/useAmlExperiments-U9AQ52RI.mjs +86 -0
  227. package/.output/server/chunks/build/useAmlExperiments-U9AQ52RI.mjs.map +1 -0
  228. package/.output/server/chunks/build/useAmlFormat-C2sl3MGB.mjs +32 -37
  229. package/.output/server/chunks/build/useAmlFormat-C2sl3MGB.mjs.map +1 -1
  230. package/.output/server/chunks/build/useAmlJobs-BM1mu5iH.mjs +251 -0
  231. package/.output/server/chunks/build/useAmlJobs-BM1mu5iH.mjs.map +1 -0
  232. package/.output/server/chunks/build/useAmlModels-C1DwIOMi.mjs +90 -0
  233. package/.output/server/chunks/build/useAmlModels-C1DwIOMi.mjs.map +1 -0
  234. package/.output/server/chunks/build/useAmlNotes-CNm47QdS.mjs +80 -0
  235. package/.output/server/chunks/build/useAmlNotes-CNm47QdS.mjs.map +1 -0
  236. package/.output/server/chunks/build/useAmlPredict-m8I1AdRn.mjs +126 -0
  237. package/.output/server/chunks/build/useAmlPredict-m8I1AdRn.mjs.map +1 -0
  238. package/.output/server/chunks/build/useAnalysisFeed-CpbOaiBD.mjs +120 -0
  239. package/.output/server/chunks/build/useAnalysisFeed-CpbOaiBD.mjs.map +1 -0
  240. package/.output/server/chunks/build/useDaqAddNode-CRorxgOY.mjs +141 -0
  241. package/.output/server/chunks/build/useDaqAddNode-CRorxgOY.mjs.map +1 -0
  242. package/.output/server/chunks/build/useDaqDetailBinding-Ck-YUW9J.mjs +72 -0
  243. package/.output/server/chunks/build/useDaqDetailBinding-Ck-YUW9J.mjs.map +1 -0
  244. package/.output/server/chunks/build/useDaqDetailFrames-CLMoreaz.mjs +78 -0
  245. package/.output/server/chunks/build/useDaqDetailFrames-CLMoreaz.mjs.map +1 -0
  246. package/.output/server/chunks/build/useDaqDetailHistory-BVNQXwC_.mjs +166 -0
  247. package/.output/server/chunks/build/useDaqDetailHistory-BVNQXwC_.mjs.map +1 -0
  248. package/.output/server/chunks/build/useDaqDetailNode-BC0e9OfX.mjs +103 -0
  249. package/.output/server/chunks/build/useDaqDetailNode-BC0e9OfX.mjs.map +1 -0
  250. package/.output/server/chunks/build/useDaqDetailParams-D173iwFg.mjs +157 -0
  251. package/.output/server/chunks/build/useDaqDetailParams-D173iwFg.mjs.map +1 -0
  252. package/.output/server/chunks/build/useDaqFilters-CC-o_21d.mjs +224 -0
  253. package/.output/server/chunks/build/useDaqFilters-CC-o_21d.mjs.map +1 -0
  254. package/.output/server/chunks/build/useDaqNodeWindow-1DWj2H5G.mjs +43 -44
  255. package/.output/server/chunks/build/useDaqNodeWindow-1DWj2H5G.mjs.map +1 -1
  256. package/.output/server/chunks/build/useDaqOptimizations-4vK2w1yn.mjs +132 -0
  257. package/.output/server/chunks/build/useDaqOptimizations-4vK2w1yn.mjs.map +1 -0
  258. package/.output/server/chunks/build/useDaqStream-BHKpSJFd.mjs +385 -0
  259. package/.output/server/chunks/build/useDaqStream-BHKpSJFd.mjs.map +1 -0
  260. package/.output/server/chunks/build/useDaqTemplates-CsXSc7yI.mjs +181 -0
  261. package/.output/server/chunks/build/useDaqTemplates-CsXSc7yI.mjs.map +1 -0
  262. package/.output/server/chunks/build/useDashboardCharts-D45083s_.mjs +312 -310
  263. package/.output/server/chunks/build/useDashboardCharts-D45083s_.mjs.map +1 -1
  264. package/.output/server/chunks/build/useDashboardData-DuKjuJTz.mjs +139 -0
  265. package/.output/server/chunks/build/useDashboardData-DuKjuJTz.mjs.map +1 -0
  266. package/.output/server/chunks/build/useDcwAddNode-C5DcxsHF.mjs +217 -0
  267. package/.output/server/chunks/build/useDcwAddNode-C5DcxsHF.mjs.map +1 -0
  268. package/.output/server/chunks/build/{useDcwCards-SaiImIYQ.mjs → useDcwCards-0bAVo6uB.mjs} +20 -23
  269. package/.output/server/chunks/build/useDcwCards-0bAVo6uB.mjs.map +1 -0
  270. package/.output/server/chunks/build/useDcwDetailScope-BNFOlt2v.mjs +184 -0
  271. package/.output/server/chunks/build/useDcwDetailScope-BNFOlt2v.mjs.map +1 -0
  272. package/.output/server/chunks/build/useDcwDetailTemplates-DSH-o0tE.mjs +143 -0
  273. package/.output/server/chunks/build/useDcwDetailTemplates-DSH-o0tE.mjs.map +1 -0
  274. package/.output/server/chunks/build/useDcwFilter-W61BFUcT.mjs +65 -0
  275. package/.output/server/chunks/build/useDcwFilter-W61BFUcT.mjs.map +1 -0
  276. package/.output/server/chunks/build/{useDcwLedger-0ie-0WTc.mjs → useDcwLedger-DsColLdc.mjs} +29 -35
  277. package/.output/server/chunks/build/useDcwLedger-DsColLdc.mjs.map +1 -0
  278. package/.output/server/chunks/build/useDcwLineMutations-Cx4Ir7g3.mjs +133 -0
  279. package/.output/server/chunks/build/useDcwLineMutations-Cx4Ir7g3.mjs.map +1 -0
  280. package/.output/server/chunks/build/useDcwLineRun-DQ0vB08z.mjs +100 -0
  281. package/.output/server/chunks/build/useDcwLineRun-DQ0vB08z.mjs.map +1 -0
  282. package/.output/server/chunks/build/useDcwParamApprovals-CYspRuDk.mjs +119 -0
  283. package/.output/server/chunks/build/useDcwParamApprovals-CYspRuDk.mjs.map +1 -0
  284. package/.output/server/chunks/build/useDcwProducts-CTbm_5S_.mjs +88 -0
  285. package/.output/server/chunks/build/useDcwProducts-CTbm_5S_.mjs.map +1 -0
  286. package/.output/server/chunks/build/useDcwQuery-E0yjZs7G.mjs +93 -0
  287. package/.output/server/chunks/build/useDcwQuery-E0yjZs7G.mjs.map +1 -0
  288. package/.output/server/chunks/build/useDcwQuickActions-BvT5VFOY.mjs +84 -0
  289. package/.output/server/chunks/build/useDcwQuickActions-BvT5VFOY.mjs.map +1 -0
  290. package/.output/server/chunks/build/useDcwRecipes-zngShyk0.mjs +263 -0
  291. package/.output/server/chunks/build/useDcwRecipes-zngShyk0.mjs.map +1 -0
  292. package/.output/server/chunks/build/useDcwStream-82IdjJKk.mjs +455 -0
  293. package/.output/server/chunks/build/useDcwStream-82IdjJKk.mjs.map +1 -0
  294. package/.output/server/chunks/build/useDcwTemplates-CpHrcnvJ.mjs +87 -0
  295. package/.output/server/chunks/build/useDcwTemplates-CpHrcnvJ.mjs.map +1 -0
  296. package/.output/server/chunks/build/useDcwWrites-BlOhljp9.mjs +136 -0
  297. package/.output/server/chunks/build/useDcwWrites-BlOhljp9.mjs.map +1 -0
  298. package/.output/server/chunks/build/useDeviceTwins-DL-VLFeX.mjs +118 -0
  299. package/.output/server/chunks/build/useDeviceTwins-DL-VLFeX.mjs.map +1 -0
  300. package/.output/server/chunks/build/useExpConfirmations-DgwqTb9O.mjs +104 -0
  301. package/.output/server/chunks/build/useExpConfirmations-DgwqTb9O.mjs.map +1 -0
  302. package/.output/server/chunks/build/useLocalTime-C__kwn8h.mjs +52 -0
  303. package/.output/server/chunks/build/useLocalTime-C__kwn8h.mjs.map +1 -0
  304. package/.output/server/chunks/build/useLogsFormat-B-o4MHy7.mjs +30 -33
  305. package/.output/server/chunks/build/useLogsFormat-B-o4MHy7.mjs.map +1 -1
  306. package/.output/server/chunks/build/useLogsManual-BcfanT0s.mjs +80 -0
  307. package/.output/server/chunks/build/useLogsManual-BcfanT0s.mjs.map +1 -0
  308. package/.output/server/chunks/build/useLogsQuery-BGlKVKpV.mjs +136 -0
  309. package/.output/server/chunks/build/useLogsQuery-BGlKVKpV.mjs.map +1 -0
  310. package/.output/server/chunks/build/useLogsScope-BRyy550Y.mjs +75 -0
  311. package/.output/server/chunks/build/useLogsScope-BRyy550Y.mjs.map +1 -0
  312. package/.output/server/chunks/build/useMonitorColumns-vVnt3r5Q.mjs +155 -166
  313. package/.output/server/chunks/build/useMonitorColumns-vVnt3r5Q.mjs.map +1 -1
  314. package/.output/server/chunks/build/useMonitorData-BUey2Xly.mjs +128 -0
  315. package/.output/server/chunks/build/useMonitorData-BUey2Xly.mjs.map +1 -0
  316. package/.output/server/chunks/build/useMonitorFormat-rhs7FlNo.mjs +77 -0
  317. package/.output/server/chunks/build/useMonitorFormat-rhs7FlNo.mjs.map +1 -0
  318. package/.output/server/chunks/build/useMonitorTerminal-Dj4QwRNW.mjs +20 -27
  319. package/.output/server/chunks/build/useMonitorTerminal-Dj4QwRNW.mjs.map +1 -1
  320. package/.output/server/chunks/build/useOperationsFeed-DWfCjP4l.mjs +182 -0
  321. package/.output/server/chunks/build/useOperationsFeed-DWfCjP4l.mjs.map +1 -0
  322. package/.output/server/chunks/build/useOpsLog--yf8erUi.mjs +139 -0
  323. package/.output/server/chunks/build/useOpsLog--yf8erUi.mjs.map +1 -0
  324. package/.output/server/chunks/build/useRecipeDispatchApprovals-CKF2sB9P.mjs +146 -0
  325. package/.output/server/chunks/build/useRecipeDispatchApprovals-CKF2sB9P.mjs.map +1 -0
  326. package/.output/server/chunks/build/useResponsive-BKDMGTHs.mjs +23 -39
  327. package/.output/server/chunks/build/useResponsive-BKDMGTHs.mjs.map +1 -1
  328. package/.output/server/chunks/build/useTeamActions-C08sAVqY.mjs +71 -0
  329. package/.output/server/chunks/build/useTeamActions-C08sAVqY.mjs.map +1 -0
  330. package/.output/server/chunks/build/useTeamAddMemberDialog-fzTmflr8.mjs +78 -0
  331. package/.output/server/chunks/build/useTeamAddMemberDialog-fzTmflr8.mjs.map +1 -0
  332. package/.output/server/chunks/build/useTeamCreateDialog-De63ep-X.mjs +91 -0
  333. package/.output/server/chunks/build/useTeamCreateDialog-De63ep-X.mjs.map +1 -0
  334. package/.output/server/chunks/build/useTeamDeployDialog-CpAtG5Jy.mjs +76 -0
  335. package/.output/server/chunks/build/useTeamDeployDialog-CpAtG5Jy.mjs.map +1 -0
  336. package/.output/server/chunks/build/useTeamDialogState-CFRUQxAf.mjs +31 -38
  337. package/.output/server/chunks/build/useTeamDialogState-CFRUQxAf.mjs.map +1 -1
  338. package/.output/server/chunks/build/useTeamPluginDialog-C1OOe1sL.mjs +99 -0
  339. package/.output/server/chunks/build/useTeamPluginDialog-C1OOe1sL.mjs.map +1 -0
  340. package/.output/server/chunks/build/useTeamsCatalog-DA41SMDu.mjs +124 -0
  341. package/.output/server/chunks/build/useTeamsCatalog-DA41SMDu.mjs.map +1 -0
  342. package/.output/server/chunks/build/useTokenClipboard-CwQpoFeP.mjs +21 -28
  343. package/.output/server/chunks/build/useTokenClipboard-CwQpoFeP.mjs.map +1 -1
  344. package/.output/server/chunks/build/useTokenCreate-XHTQExra.mjs +106 -0
  345. package/.output/server/chunks/build/useTokenCreate-XHTQExra.mjs.map +1 -0
  346. package/.output/server/chunks/build/useTokenRename-Cf1B0cRy.mjs +81 -0
  347. package/.output/server/chunks/build/useTokenRename-Cf1B0cRy.mjs.map +1 -0
  348. package/.output/server/chunks/build/useTokenReveal-C8n1Vt9t.mjs +108 -0
  349. package/.output/server/chunks/build/useTokenReveal-C8n1Vt9t.mjs.map +1 -0
  350. package/.output/server/chunks/build/useTokensList-MMIq24E-.mjs +86 -0
  351. package/.output/server/chunks/build/useTokensList-MMIq24E-.mjs.map +1 -0
  352. package/.output/server/chunks/build/useTownBus-D9SoIsAN.mjs +16 -17
  353. package/.output/server/chunks/build/useTownBus-D9SoIsAN.mjs.map +1 -1
  354. package/.output/server/chunks/build/useWorkbenchAuth-Dyc_czui.mjs +131 -0
  355. package/.output/server/chunks/build/useWorkbenchAuth-Dyc_czui.mjs.map +1 -0
  356. package/.output/server/chunks/build/useWorkbenchWorkspaces-DT33HbBD.mjs +128 -0
  357. package/.output/server/chunks/build/useWorkbenchWorkspaces-DT33HbBD.mjs.map +1 -0
  358. package/.output/server/chunks/build/useWorkshopApi-BkEgGBIM.mjs +118 -0
  359. package/.output/server/chunks/build/useWorkshopApi-BkEgGBIM.mjs.map +1 -0
  360. package/.output/server/chunks/build/useWorkshopWs-BWrVj4jL.mjs +1577 -0
  361. package/.output/server/chunks/build/useWorkshopWs-BWrVj4jL.mjs.map +1 -0
  362. package/.output/server/chunks/build/{useWorkspaceAuth-Dlvj9csD.mjs → useWorkspaceAuth-TahC9EC7.mjs} +4 -16
  363. package/.output/server/chunks/build/useWorkspaceAuth-TahC9EC7.mjs.map +1 -0
  364. package/.output/server/chunks/build/useWorkspaceChannels-BVAHmhN3.mjs +94 -0
  365. package/.output/server/chunks/build/useWorkspaceChannels-BVAHmhN3.mjs.map +1 -0
  366. package/.output/server/chunks/build/useWorkspacePanels-CTwREmq0.mjs +30 -33
  367. package/.output/server/chunks/build/useWorkspacePanels-CTwREmq0.mjs.map +1 -1
  368. package/.output/server/chunks/build/useWorkspaceShell-rQHWNNWJ.mjs +150 -0
  369. package/.output/server/chunks/build/useWorkspaceShell-rQHWNNWJ.mjs.map +1 -0
  370. package/.output/server/chunks/build/users-pVCK50z-.mjs +566 -0
  371. package/.output/server/chunks/build/users-pVCK50z-.mjs.map +1 -0
  372. package/.output/server/chunks/build/workshop-DAgsBgG4.mjs +499 -0
  373. package/.output/server/chunks/build/workshop-DAgsBgG4.mjs.map +1 -0
  374. package/.output/server/chunks/build/workspaces-CmW0cpOt.mjs +111 -121
  375. package/.output/server/chunks/build/workspaces-CmW0cpOt.mjs.map +1 -1
  376. package/.output/server/chunks/routes/api/plugins/_name/_...path_.mjs +4 -1
  377. package/.output/server/chunks/routes/api/plugins/_name/_...path_.mjs.map +1 -1
  378. package/.output/server/chunks/routes/renderer.mjs +1 -1
  379. package/.output/server/chunks/routes/renderer.mjs.map +1 -1
  380. package/.output/server/chunks/virtual/entry.mjs +9357 -10721
  381. package/.output/server/chunks/virtual/entry.mjs.map +1 -1
  382. package/.output/server/chunks/virtual/precomputed.mjs +1 -1
  383. package/.output/server/chunks/virtual/precomputed.mjs.map +1 -1
  384. package/.output/server/package.json +1 -1
  385. package/README-zh.md +2 -2
  386. package/README.md +3 -3
  387. package/app/components/AwLogo.vue +75 -75
  388. package/app/components/aml/AmlDatasetFormModal.vue +279 -279
  389. package/app/components/aml/AmlDatasetTable.vue +319 -319
  390. package/app/components/aml/AmlExperimentsTable.vue +142 -142
  391. package/app/components/aml/AmlInfraBanner.vue +23 -23
  392. package/app/components/aml/AmlJobsTable.vue +248 -248
  393. package/app/components/aml/AmlOverviewBar.vue +62 -62
  394. package/app/components/aml/AmlPageHeader.vue +47 -47
  395. package/app/components/aml/AmlPredictConsole.vue +201 -201
  396. package/app/components/app-header/HitlBell.vue +423 -423
  397. package/app/components/daq/DaqAddNodeModal.vue +209 -209
  398. package/app/components/daq/DaqAlarmBar.vue +46 -46
  399. package/app/components/daq/DaqControlCard.vue +159 -159
  400. package/app/components/daq/DaqInfraBanner.vue +31 -31
  401. package/app/components/daq/DaqLineBanner.vue +47 -47
  402. package/app/components/daq/DaqNodePanel.vue +396 -396
  403. package/app/components/daq/DaqOptPanel.vue +197 -197
  404. package/app/components/daq/DaqTemplateModal.vue +246 -246
  405. package/app/components/dashboard/DashboardGaugeBand.vue +78 -78
  406. package/app/components/dashboard/DashboardHero.vue +209 -209
  407. package/app/components/dashboard/DashboardLineStatePanel.vue +78 -78
  408. package/app/components/dashboard/DashboardNodeStatePanel.vue +46 -46
  409. package/app/components/dashboard/DashboardPipelinePanel.vue +46 -46
  410. package/app/components/dashboard/DashboardTrendPanel.vue +83 -83
  411. package/app/components/dashboard/DashboardWritePanel.vue +52 -52
  412. package/app/components/dcw/DcwCreateLineModal.vue +105 -105
  413. package/app/components/dcw/DcwDeleteLineModal.vue +73 -73
  414. package/app/components/dcw/DcwDetailTemplateModal.vue +238 -238
  415. package/app/components/dcw/DcwLedgerCard.vue +160 -160
  416. package/app/components/dcw/DcwMesArtifacts.vue +140 -140
  417. package/app/components/dcw/DcwProductCreateModal.vue +113 -113
  418. package/app/components/dcw/DcwRecipeDispatchHistoryModal.vue +244 -244
  419. package/app/components/dcw/DcwRecipeEditModal.vue +399 -399
  420. package/app/components/dcw/DcwRecipeHistoryModal.vue +165 -165
  421. package/app/components/dcw/DcwRunDataModal.vue +191 -191
  422. package/app/components/dcw/DcwTemplateModal.vue +227 -227
  423. package/app/components/dcw/DcwWriteHistoryCard.vue +96 -96
  424. package/app/components/dcw/ExpConfirmCard.vue +103 -103
  425. package/app/components/dcw/RecipeDispatchApprovalCard.vue +330 -330
  426. package/app/components/logs/LogsPageHead.vue +71 -71
  427. package/app/components/monitor/MonitorAgentTable.vue +143 -143
  428. package/app/components/monitor/MonitorChannelTable.vue +80 -80
  429. package/app/components/monitor/MonitorLoginGate.vue +24 -24
  430. package/app/components/monitor/MonitorPageHead.vue +92 -92
  431. package/app/components/monitor/MonitorProcessTable.vue +159 -159
  432. package/app/components/ontology/OntologyGraph.vue +356 -356
  433. package/app/components/operations/OperationsFilterCard.vue +164 -164
  434. package/app/components/operations/OperationsPageHead.vue +47 -47
  435. package/app/components/tokens/TokenCreateModal.vue +42 -42
  436. package/app/components/tokens/TokenOnceModal.vue +164 -164
  437. package/app/components/tokens/TokenRenameModal.vue +40 -40
  438. package/app/components/tokens/TokensPageHead.vue +76 -76
  439. package/app/components/workshop/A2aRpcDebugger.vue +237 -237
  440. package/app/components/workshop/AgentInspectorDrawer.vue +424 -424
  441. package/app/components/workshop/AgentLanesView.vue +278 -278
  442. package/app/components/workshop/ArtifactCard.vue +120 -120
  443. package/app/components/workshop/AssetLibrary.vue +452 -452
  444. package/app/components/workshop/ChatMemberPanel.vue +556 -556
  445. package/app/components/workshop/CommandPalette.vue +270 -270
  446. package/app/components/workshop/Composer.vue +540 -540
  447. package/app/components/workshop/DaqTemplateIcon.vue +33 -33
  448. package/app/components/workshop/DeviceTwinPanel.vue +167 -167
  449. package/app/components/workshop/FileSelectorModal.vue +188 -188
  450. package/app/components/workshop/InspectorPanel.vue +301 -301
  451. package/app/components/workshop/PluginSlot.vue +120 -120
  452. package/app/components/workshop/TranscriptTimeline.vue +223 -223
  453. package/app/components/workshop/agents/AgentTemplateEditModal.vue +139 -139
  454. package/app/components/workshop/blocks/ClusterArtifact.vue +61 -61
  455. package/app/components/workshop/blocks/ClusterError.vue +85 -85
  456. package/app/components/workshop/blocks/ClusterLife.vue +87 -87
  457. package/app/components/workshop/blocks/ClusterMember.vue +95 -95
  458. package/app/components/workshop/blocks/ClusterMemory.vue +84 -84
  459. package/app/components/workshop/blocks/ClusterOther.vue +67 -67
  460. package/app/components/workshop/blocks/ClusterStatus.vue +149 -149
  461. package/app/components/workshop/blocks/ClusterTool.vue +176 -176
  462. package/app/components/workshop/blocks/EventBlockAvatar.vue +114 -114
  463. package/app/components/workshop/blocks/EventBlockHead.vue +232 -232
  464. package/app/components/workshop/composer/ComposerToolbar.vue +278 -278
  465. package/app/components/workshop/composer/MentionMenu.vue +135 -135
  466. package/app/components/workshop/composer/ReplyChip.vue +65 -65
  467. package/app/components/workshop/composer/StatusChip.vue +171 -171
  468. package/app/components/workshop/console/Dock.vue +71 -71
  469. package/app/components/workshop/console/LeftPane.vue +84 -84
  470. package/app/components/workshop/device-twin/DeviceTwinCard.vue +265 -265
  471. package/app/components/workshop/device-twin/DeviceTwinDcwSection.vue +203 -203
  472. package/app/components/workshop/lanes/AddMemberModal.vue +270 -270
  473. package/app/components/workshop/lanes/EditMemberModal.vue +106 -106
  474. package/app/components/workshop/lanes/LanesToolbar.vue +97 -97
  475. package/app/components/workshop/session-list/ChannelSettingsModal.vue +3 -3
  476. package/app/components/workshop/session-list/MountChannelModal.vue +124 -124
  477. package/app/components/workshop/session-list/SaveTemplateModal.vue +93 -93
  478. package/app/components/workshop/task-board/Card.vue +172 -172
  479. package/app/components/workshop/task-board/Column.vue +151 -151
  480. package/app/components/workshop/task-board/List.vue +157 -157
  481. package/app/components/workshop/task-board/StatusMenu.vue +88 -88
  482. package/app/components/workshop/teams/TeamAddMemberModal.vue +53 -53
  483. package/app/components/workshop/teams/TeamCreateModal.vue +94 -94
  484. package/app/components/workshop/teams/TeamDeployModal.vue +40 -40
  485. package/app/components/workshop/teams/TeamPluginModal.vue +119 -119
  486. package/app/components/workshop/terminal/OmpTerminalPanel.vue +270 -270
  487. package/app/components/workshop/terminal/TerminalHitlCard.vue +170 -170
  488. package/app/components/workshop/town/TownScene.ts +466 -466
  489. package/app/components/workshop/town/TownView.vue +561 -561
  490. package/app/components/workshop/town/components/AutoModeConfirmModal.vue +94 -94
  491. package/app/components/workshop/town/components/TownAgentBindings.vue +405 -405
  492. package/app/components/workshop/town/components/TownAgentInspector.vue +554 -554
  493. package/app/components/workshop/town/components/TownAlarmList.vue +147 -147
  494. package/app/components/workshop/town/components/TownBoundaryPanel.vue +350 -350
  495. package/app/components/workshop/town/components/TownCalloutLayer.vue +147 -147
  496. package/app/components/workshop/town/components/TownChannelDock.vue +116 -116
  497. package/app/components/workshop/town/components/TownControlDock.vue +405 -405
  498. package/app/components/workshop/town/components/TownDaqNodeInspector.vue +345 -345
  499. package/app/components/workshop/town/components/TownDaqTree.vue +366 -366
  500. package/app/components/workshop/town/components/TownDcwBindSection.vue +473 -473
  501. package/app/components/workshop/town/components/TownDcwNodeInspector.vue +185 -185
  502. package/app/components/workshop/town/components/TownDcwTree.vue +280 -280
  503. package/app/components/workshop/town/components/TownDeviceBindings.vue +394 -394
  504. package/app/components/workshop/town/components/TownDeviceTransform.vue +248 -248
  505. package/app/components/workshop/town/components/TownEventList.vue +120 -120
  506. package/app/components/workshop/town/components/TownHealthBody.vue +100 -100
  507. package/app/components/workshop/town/components/TownKpiStrip.vue +207 -207
  508. package/app/components/workshop/town/components/TownLeftRail.vue +308 -308
  509. package/app/components/workshop/town/components/TownLoadingMask.vue +61 -61
  510. package/app/components/workshop/town/components/TownNavMap.vue +154 -154
  511. package/app/components/workshop/town/components/TownRightRail.vue +543 -543
  512. package/app/components/workshop/town/components/TownStage.vue +281 -281
  513. package/app/components/workshop/town/components/TownStageTop.vue +238 -238
  514. package/app/components/workshop/town/components/TownStatusBar.vue +108 -108
  515. package/app/components/workshop/town/components/TownTopNav.vue +367 -367
  516. package/app/components/workshop/town/components/TownTrendDock.vue +178 -178
  517. package/app/components/workshop/town/scene/town-scene-agents.ts +254 -254
  518. package/app/components/workshop/town/scene/town-scene-behavior.ts +194 -194
  519. package/app/components/workshop/town/scene/town-scene-bubbles.ts +96 -96
  520. package/app/components/workshop/town/scene/town-scene-core.ts +158 -158
  521. package/app/components/workshop/town/scene/town-scene-models.ts +109 -109
  522. package/app/components/workshop/town/scene/town-scene-visuals.ts +279 -279
  523. package/app/components/workshop/town/scene/town-scene3d-agents.ts +308 -308
  524. package/app/components/workshop/town/scene/town-scene3d-blocks.ts +297 -297
  525. package/app/components/workshop/town/scene/town-scene3d-bubbles.ts +281 -281
  526. package/app/components/workshop/town/scene/town-scene3d-camera.ts +282 -282
  527. package/app/components/workshop/town/scene/town-scene3d-devices.ts +433 -433
  528. package/app/components/workshop/town/scene/town-scene3d-editing.ts +490 -490
  529. package/app/components/workshop/town/scene/town-scene3d-events.ts +173 -173
  530. package/app/components/workshop/town/scene/town-scene3d-factory.ts +412 -412
  531. package/app/components/workshop/town/scene/town-scene3d-hud.ts +110 -110
  532. package/app/components/workshop/town/scene/town-scene3d-lifecycle.ts +144 -144
  533. package/app/components/workshop/town/scene/town-scene3d-links.ts +141 -141
  534. package/app/components/workshop/town/scene/town-scene3d-loop.ts +286 -286
  535. package/app/components/workshop/town/scene/town-scene3d-models.ts +154 -154
  536. package/app/components/workshop/town/scene/town-scene3d-nodes.ts +562 -562
  537. package/app/components/workshop/town/scene/town-scene3d-ranges.ts +273 -273
  538. package/app/components/workshop/town/scene/town-scene3d-renderer.ts +320 -320
  539. package/app/components/workshop/town/scene/town-scene3d-selection.ts +257 -257
  540. package/app/components/workshop/town/scene/town-scene3d-types.ts +264 -264
  541. package/app/components/workshop/transcript/TranscriptBlockList.vue +68 -68
  542. package/app/components/workshop/transcript/TranscriptEarlierPager.vue +81 -81
  543. package/app/components/workshop/transcript/TranscriptFilterBar.vue +126 -126
  544. package/app/components/workshop/workbench/CreateWorkspaceModal.vue +36 -36
  545. package/app/components/workshop/workbench/WorkspaceEmpty.vue +56 -56
  546. package/app/composables/useResponsive.ts +88 -88
  547. package/app/composables/workshop/device-twin-types.ts +29 -29
  548. package/app/composables/workshop/event-blocks/attention.ts +58 -58
  549. package/app/composables/workshop/event-blocks/classify.ts +44 -44
  550. package/app/composables/workshop/event-blocks/clusterer.ts +231 -231
  551. package/app/composables/workshop/event-blocks/fold-stream.ts +45 -45
  552. package/app/composables/workshop/event-blocks/markdown.ts +81 -81
  553. package/app/composables/workshop/event-blocks/mentions.ts +49 -49
  554. package/app/composables/workshop/event-blocks/text-utils.ts +100 -100
  555. package/app/composables/workshop/event-blocks/types.ts +40 -40
  556. package/app/composables/workshop/town/town-relay-props.ts +231 -231
  557. package/app/composables/workshop/town/town-view-types.ts +145 -145
  558. package/app/composables/workshop/town/useTownAgentBindings.ts +182 -182
  559. package/app/composables/workshop/town/useTownAgentChat.ts +203 -203
  560. package/app/composables/workshop/town/useTownAlarms.ts +36 -36
  561. package/app/composables/workshop/town/useTownCallouts.ts +174 -174
  562. package/app/composables/workshop/town/useTownChannels.ts +220 -220
  563. package/app/composables/workshop/town/useTownHealth.ts +66 -66
  564. package/app/composables/workshop/town/useTownHudTickers.ts +77 -77
  565. package/app/composables/workshop/town/useTownLayout.ts +277 -277
  566. package/app/composables/workshop/town/useTownNavMap.ts +301 -301
  567. package/app/composables/workshop/town/useTownNodeBindings.ts +345 -345
  568. package/app/composables/workshop/town/useTownPanelDrag.ts +91 -91
  569. package/app/composables/workshop/town/useTownRailData.ts +421 -421
  570. package/app/composables/workshop/town/useTownSceneControl.ts +92 -92
  571. package/app/composables/workshop/town/useTownSceneInput.ts +275 -275
  572. package/app/composables/workshop/town/useTownSceneRuntime.ts +390 -390
  573. package/app/composables/workshop/town/useTownSheets.ts +41 -41
  574. package/app/composables/workshop/town/useTownTrends.ts +93 -93
  575. package/app/composables/workshop/useChannelList.ts +88 -88
  576. package/app/composables/workshop/useChannelTerminals.ts +65 -65
  577. package/app/composables/workshop/useComposerMentions.ts +130 -130
  578. package/app/composables/workshop/useDcwStream.ts +374 -374
  579. package/app/composables/workshop/useDeviceTwinDcwWrite.ts +77 -77
  580. package/app/composables/workshop/useDeviceTwinPanel.ts +56 -56
  581. package/app/composables/workshop/useEscClose.ts +44 -44
  582. package/app/composables/workshop/useEventBlockView.ts +159 -159
  583. package/app/composables/workshop/useEventBlocks.ts +33 -33
  584. package/app/composables/workshop/useHitlAnswer.ts +184 -184
  585. package/app/composables/workshop/useLaneWidths.ts +27 -27
  586. package/app/composables/workshop/useOmpTerminalSession.ts +424 -424
  587. package/app/composables/workshop/usePluginAdmin.ts +152 -152
  588. package/app/composables/workshop/usePluginPanels.ts +72 -72
  589. package/app/composables/workshop/useRuntimeConfigDraft.ts +118 -118
  590. package/app/composables/workshop/useSettingsGroups.ts +243 -243
  591. package/app/composables/workshop/useTaskBoardColumns.ts +47 -47
  592. package/app/composables/workshop/useTerminalRenderer.ts +308 -308
  593. package/app/composables/workshop/useTranscriptEnterStage.ts +48 -48
  594. package/app/composables/workshop/useTranscriptHistory.ts +52 -52
  595. package/app/composables/workshop/useTranscriptScroll.ts +113 -113
  596. package/app/composables/workshop/useVisibleInterval.ts +42 -42
  597. package/app/composables/workshop/useWorkshopWs.ts +265 -265
  598. package/app/config/index.ts +1 -1
  599. package/app/middleware/locale-cookie.global.ts +22 -22
  600. package/app/pages/aml/api.ts +6 -6
  601. package/app/pages/aml/composables/useAmlDatasets.ts +38 -38
  602. package/app/pages/aml/composables/useAmlEntities.ts +57 -57
  603. package/app/pages/aml/composables/useAmlEnv.ts +191 -191
  604. package/app/pages/aml/composables/useAmlExperiments.ts +45 -45
  605. package/app/pages/aml/composables/useAmlFormat.ts +44 -44
  606. package/app/pages/aml/composables/useAmlJobs.ts +131 -131
  607. package/app/pages/aml/composables/useAmlModels.ts +56 -56
  608. package/app/pages/aml/composables/useAmlNotes.ts +47 -47
  609. package/app/pages/aml/composables/useAmlPredict.ts +93 -93
  610. package/app/pages/aml/constants.ts +63 -63
  611. package/app/pages/aml/index.vue +236 -236
  612. package/app/pages/composables/useDashboardCharts.ts +192 -192
  613. package/app/pages/composables/useDashboardData.ts +144 -144
  614. package/app/pages/daq/composables/useDaqAddNode.ts +126 -126
  615. package/app/pages/daq/composables/useDaqDetailBinding.ts +29 -29
  616. package/app/pages/daq/composables/useDaqDetailFrames.ts +42 -42
  617. package/app/pages/daq/composables/useDaqDetailNode.ts +53 -53
  618. package/app/pages/daq/composables/useDaqDetailParams.ts +138 -138
  619. package/app/pages/daq/composables/useDaqFilters.ts +187 -187
  620. package/app/pages/daq/composables/useDaqNodeWindow.ts +86 -86
  621. package/app/pages/daq/composables/useDaqOptimizations.ts +99 -99
  622. package/app/pages/daq/composables/useDaqTemplates.ts +152 -152
  623. package/app/pages/daq/index.vue +260 -260
  624. package/app/pages/dcw/composables/useDcwCards.ts +27 -27
  625. package/app/pages/dcw/composables/useDcwDetailScope.ts +145 -145
  626. package/app/pages/dcw/composables/useDcwDetailTemplates.ts +94 -94
  627. package/app/pages/dcw/composables/useDcwFilter.ts +29 -29
  628. package/app/pages/dcw/composables/useDcwLedger.ts +34 -34
  629. package/app/pages/dcw/composables/useDcwLineMutations.ts +115 -115
  630. package/app/pages/dcw/composables/useDcwLineRun.ts +60 -60
  631. package/app/pages/dcw/composables/useDcwProducts.ts +54 -54
  632. package/app/pages/dcw/composables/useDcwQuery.ts +68 -68
  633. package/app/pages/dcw/composables/useDcwQuickActions.ts +47 -47
  634. package/app/pages/dcw/composables/useDcwRecipes.ts +256 -256
  635. package/app/pages/dcw/composables/useDcwTemplates.ts +50 -50
  636. package/app/pages/dcw/index.vue +195 -195
  637. package/app/pages/dcw/types.ts +9 -9
  638. package/app/pages/index.vue +126 -126
  639. package/app/pages/logs/composables/useLogsFormat.ts +43 -43
  640. package/app/pages/logs/composables/useLogsScope.ts +39 -39
  641. package/app/pages/monitor/types.ts +61 -61
  642. package/app/pages/operations.vue +61 -61
  643. package/app/pages/permissions/index.vue +369 -369
  644. package/app/pages/tokens/composables/useTokenClipboard.ts +33 -33
  645. package/app/pages/tokens/composables/useTokenCreate.ts +93 -93
  646. package/app/pages/tokens/composables/useTokenRename.ts +54 -54
  647. package/app/pages/tokens/composables/useTokenReveal.ts +84 -84
  648. package/app/pages/tokens/composables/useTokensList.ts +60 -60
  649. package/app/pages/tokens.vue +111 -111
  650. package/app/pages/tools/index.vue +98 -98
  651. package/app/pages/workshop/agents.vue +130 -130
  652. package/app/pages/workshop/composables/useAgentHarnessOptions.ts +59 -59
  653. package/app/pages/workshop/composables/useAgentTemplateActions.ts +42 -42
  654. package/app/pages/workshop/composables/useAgentTemplateDialogState.ts +24 -24
  655. package/app/pages/workshop/composables/useAgentTemplateForm.ts +88 -88
  656. package/app/pages/workshop/composables/useAgentTemplatesCatalog.ts +92 -92
  657. package/app/pages/workshop/composables/useTeamActions.ts +44 -44
  658. package/app/pages/workshop/composables/useTeamAddMemberDialog.ts +49 -49
  659. package/app/pages/workshop/composables/useTeamCreateDialog.ts +67 -67
  660. package/app/pages/workshop/composables/useTeamDeployDialog.ts +49 -49
  661. package/app/pages/workshop/composables/useTeamDialogState.ts +46 -46
  662. package/app/pages/workshop/composables/useTeamPluginDialog.ts +72 -72
  663. package/app/pages/workshop/composables/useTeamsCatalog.ts +100 -100
  664. package/app/pages/workshop/composables/useWorkbenchWorkspaces.ts +123 -123
  665. package/app/pages/workshop/composables/useWorkspaceAuth.ts +31 -31
  666. package/app/pages/workshop/composables/useWorkspaceChannels.ts +62 -62
  667. package/app/pages/workshop/composables/useWorkspaceShell.ts +136 -136
  668. package/app/pages/workshop/schedules.vue +553 -553
  669. package/app/pages/workshop/w/[wsId].vue +221 -221
  670. package/app/plugins/aw-plugins.client.ts +213 -213
  671. package/app/plugins/esc-close.client.ts +31 -31
  672. package/app/stores/workshop/hitl.ts +183 -183
  673. package/app/stores/workshop/narrow-fetch.ts +23 -23
  674. package/app/utils/api-error.ts +75 -75
  675. package/app/utils/builtin-catalog.ts +104 -104
  676. package/app/utils/chart-trend.ts +97 -97
  677. package/app/utils/dcw-driver-badge.ts +16 -16
  678. package/app/utils/dcw-recipe-form.ts +26 -26
  679. package/cli/commands/tui.mjs +28 -28
  680. package/cli/commands/update.mjs +124 -124
  681. package/cli/core/child-lifecycle.mjs +136 -136
  682. package/cli/core/meta.mjs +38 -38
  683. package/cli/core/post-build.mjs +96 -96
  684. package/config.yml +1 -1
  685. package/docs/cli.en.md +2 -2
  686. package/docs/cli.md +2 -2
  687. package/docs/mcp.en.md +27 -27
  688. package/docs/multi-harness-architecture.md +248 -248
  689. package/docs/plugins.en.md +1 -1
  690. package/docs/plugins.md +1 -1
  691. package/docs/sdk.en.md +1 -1
  692. package/docs/sdk.md +1 -1
  693. package/docs/tui.md +43 -43
  694. package/i18n/dicts/_en.json +1551 -1551
  695. package/i18n/dicts/_en2.json +300 -300
  696. package/i18n/dicts/_en4.json +114 -114
  697. package/i18n/dicts/agentLanesView.json +61 -61
  698. package/i18n/dicts/appHeader.json +17 -17
  699. package/i18n/dicts/channelSessionList.json +51 -51
  700. package/i18n/dicts/chat.json +79 -79
  701. package/i18n/dicts/clusterTool.json +4 -4
  702. package/i18n/dicts/composer.json +38 -38
  703. package/i18n/dicts/ctpl.json +37 -37
  704. package/i18n/dicts/dcwDetail.json +219 -219
  705. package/i18n/dicts/lineOps.json +14 -14
  706. package/i18n/dicts/multiChannelView.json +13 -13
  707. package/i18n/dicts/notifications.json +13 -13
  708. package/i18n/dicts/taskInspectorDrawer.json +25 -25
  709. package/i18n/dicts/teamPlugins.json +10 -10
  710. package/i18n/dicts/townView.json +209 -209
  711. package/mcp/discovery.mjs +227 -227
  712. package/package.json +1 -1
  713. package/public/favicon.svg +14 -14
  714. package/public/robots.txt +3 -3
  715. package/scripts/_audit/audit-harness-adapters.md +664 -664
  716. package/scripts/_audit/aw-mcp-live-e2e.mjs +293 -293
  717. package/scripts/_audit/bump-version.mjs +51 -51
  718. package/scripts/_audit/detached-instance.mjs +112 -112
  719. package/scripts/_audit/detached-start.mjs +103 -103
  720. package/scripts/_audit/eda-ui-fix-acceptance.mjs +212 -212
  721. package/scripts/_audit/guard-upstream-liveness.mjs +104 -104
  722. package/scripts/_audit/http-api-authz-audit.md +657 -657
  723. package/scripts/_audit/kb-team-mock-e2e.mjs +146 -146
  724. package/scripts/_audit/kb-team-omp-e2e.mjs +229 -229
  725. package/scripts/_audit/run.mjs +21 -21
  726. package/scripts/_audit/runtime-audit.md +716 -716
  727. package/scripts/_audit/skills-guided-e2e.mjs +316 -316
  728. package/scripts/_audit/stability-soak.mjs +252 -252
  729. package/scripts/_audit/stubs/nuxt-imports.mjs +67 -67
  730. package/scripts/_audit/ts-register-hook.mjs +12 -12
  731. package/scripts/_audit/ts-resolve-hook.mjs +96 -96
  732. package/scripts/_aw-packaged-start.cjs +22 -22
  733. package/scripts/_aw0746-stage12.mjs +94 -94
  734. package/scripts/_aw0746-stage34.mjs +136 -136
  735. package/scripts/_aw0746-stage6b-train-sweep.mjs +145 -145
  736. package/scripts/_aw0746-stage6c-jobsmoke.mjs +69 -69
  737. package/scripts/_dbg-configroot-audit.mjs +86 -86
  738. package/scripts/_dbg-daq-intervals-func.mjs +115 -115
  739. package/scripts/_dbg-perms-e2e.mjs +142 -142
  740. package/scripts/_dbg-protocol-matrix.mjs +462 -462
  741. package/scripts/_dbg-render-regression.mjs +193 -193
  742. package/scripts/_dbg-schedule-e2e.mjs +262 -262
  743. package/scripts/_e2e-ui-functional.mjs +371 -371
  744. package/scripts/_i18n-en-cjk-scan.mjs +28 -28
  745. package/scripts/_i18n-en-verify.mjs +107 -107
  746. package/scripts/_i18n-extra-checks.mjs +53 -53
  747. package/scripts/_i18n-scan-hardcoded.mjs +180 -180
  748. package/scripts/_lib-aml-python-run.mjs +17 -17
  749. package/scripts/_lint-reflow.mjs +105 -105
  750. package/scripts/_loop-biax-campaign.mjs +130 -130
  751. package/scripts/_plc-sim-detached.cjs +22 -22
  752. package/scripts/_probe-daq-omp-task.mjs +100 -100
  753. package/scripts/_probe-daq-scope-default.mjs +123 -123
  754. package/scripts/_probe-model-channel-link.cjs +25 -25
  755. package/scripts/_probe-recipe-switch.mjs +92 -92
  756. package/scripts/_provision-injection-line.mjs +39 -39
  757. package/scripts/_run-matrix.ps1 +53 -53
  758. package/scripts/_sweep-button-contrast.mjs +87 -87
  759. package/scripts/acceptance-aml-hybrid-e2e.ts +396 -396
  760. package/scripts/acceptance-aml-hybrid-live.mjs +93 -93
  761. package/scripts/acceptance-aml-model-identity.ts +137 -137
  762. package/scripts/agent-daq-isolation-e2e.mjs +91 -91
  763. package/scripts/api-contract-smoke.mjs +126 -126
  764. package/scripts/ask-hitl-e2e.mjs +96 -96
  765. package/scripts/aw-expose.mjs +159 -159
  766. package/scripts/channel-interaction-smoke.mjs +80 -80
  767. package/scripts/data-studio-ui-e2e.mjs +163 -163
  768. package/scripts/demo-group-chat-all-real.ts +279 -279
  769. package/scripts/demo-group-chat-omp-cases.ts +210 -210
  770. package/scripts/demo-group-chat-omp.ts +184 -184
  771. package/scripts/demo-group-chat-order.ts +197 -197
  772. package/scripts/dev-modbus-simulator.mjs +55 -55
  773. package/scripts/docs-shots.mjs +36 -36
  774. package/scripts/e2e-agentteam-chat.mjs +473 -473
  775. package/scripts/e2e-agentteam-real-triage.mjs +421 -421
  776. package/scripts/e2e-aml-decoupled.mjs +162 -162
  777. package/scripts/e2e-aw-tui-global.mjs +277 -277
  778. package/scripts/e2e-closedloop/cleanup.mjs +27 -27
  779. package/scripts/e2e-closedloop/lib.mjs +109 -109
  780. package/scripts/e2e-closedloop/main.mjs +59 -59
  781. package/scripts/e2e-closedloop/scenarios-accounts.mjs +210 -210
  782. package/scripts/e2e-closedloop/scenarios-authz.mjs +196 -196
  783. package/scripts/e2e-closedloop/scenarios-daq-dcw.mjs +222 -222
  784. package/scripts/e2e-closedloop/scenarios-plugins.mjs +169 -169
  785. package/scripts/e2e-closedloop/state.mjs +10 -10
  786. package/scripts/e2e-config-groups.mjs +238 -238
  787. package/scripts/e2e-crash-cycle.mjs +108 -108
  788. package/scripts/e2e-full-closedloop.mjs +16 -16
  789. package/scripts/e2e-hil-multi-user.mjs +307 -307
  790. package/scripts/e2e-hil-restart.mjs +339 -339
  791. package/scripts/e2e-idd-results-ui.mjs +175 -0
  792. package/scripts/e2e-idd-results.mjs +48 -16
  793. package/scripts/e2e-injection-recipe-closedloop.mjs +203 -203
  794. package/scripts/e2e-line-governance.mjs +352 -352
  795. package/scripts/e2e-ontology.mjs +393 -393
  796. package/scripts/e2e-plc-plugin-closedloop.mjs +549 -549
  797. package/scripts/e2e-timezone-settings.mjs +57 -57
  798. package/scripts/full-stack-shots.mjs +145 -145
  799. package/scripts/full-tool-injection-harness-e2e.mjs +214 -214
  800. package/scripts/hitl-reject-e2e.mjs +131 -131
  801. package/scripts/line-log-smoke.mjs +260 -260
  802. package/scripts/live-aml-mockomp.mjs +304 -304
  803. package/scripts/live-aml-optloop-resume.mjs +322 -322
  804. package/scripts/live-aml-optloop.mjs +588 -588
  805. package/scripts/live-aml-stage9.mjs +169 -169
  806. package/scripts/live-aml-two-goals.mjs +315 -315
  807. package/scripts/live-optloop-two-modes.mjs +857 -857
  808. package/scripts/mes-agent-integration-e2e.mjs +361 -361
  809. package/scripts/ops-plugins-e2e.mjs +85 -85
  810. package/scripts/proof-omp-real.ts +189 -189
  811. package/scripts/scenario-suite-setup.mjs +337 -337
  812. package/scripts/scenario-suite-stability.mjs +144 -144
  813. package/scripts/smoke-optimization-verify.ts +72 -72
  814. package/scripts/team-coordination-e2e.mjs +96 -96
  815. package/scripts/test-agentteam-task-chat-flow.ts +420 -420
  816. package/scripts/test-agentteam-workflow.ts +472 -472
  817. package/scripts/test-aw-skills.mjs +102 -102
  818. package/scripts/test-cli-exit.mjs +343 -343
  819. package/scripts/test-daq-frame-race.mjs +358 -358
  820. package/scripts/test-data-root.mjs +208 -208
  821. package/scripts/test-events-index.mjs +176 -176
  822. package/scripts/test-group-chat-hardening.ts +265 -265
  823. package/scripts/test-group-chat-unit/lib.ts +186 -186
  824. package/scripts/test-group-chat-unit/main.ts +45 -45
  825. package/scripts/test-group-chat-unit/section-a-migration.ts +75 -75
  826. package/scripts/test-group-chat-unit/section-b-permission-matrix.ts +88 -88
  827. package/scripts/test-group-chat-unit/section-c-member-lifecycle.ts +64 -64
  828. package/scripts/test-group-chat-unit/section-d-mention-resolution.ts +36 -36
  829. package/scripts/test-group-chat-unit/section-e-chat-facts.ts +97 -97
  830. package/scripts/test-group-chat-unit/section-f-user-notifications.ts +52 -52
  831. package/scripts/test-group-chat-unit/section-g-member-projection.ts +44 -44
  832. package/scripts/test-group-chat-unit/section-h-outbox-consistency.ts +30 -30
  833. package/scripts/test-group-chat-unit/section-i-read-idempotency.ts +24 -24
  834. package/scripts/test-group-chat-unit/section-j-permission-scope.ts +150 -150
  835. package/scripts/test-group-chat-unit.ts +35 -35
  836. package/scripts/test-hitl-decision.ts +526 -526
  837. package/scripts/test-hitl-legacy-channel-auth.ts +143 -143
  838. package/scripts/test-hitl-registry.ts +112 -112
  839. package/scripts/test-log-flooding.mjs +160 -160
  840. package/scripts/test-lru.mjs +101 -101
  841. package/scripts/test-memory-month-query.mjs +70 -70
  842. package/scripts/test-plugin-hardening.mjs +90 -90
  843. package/scripts/test-plugin-lifecycle.mjs +173 -173
  844. package/scripts/test-rollback-index.mjs +137 -137
  845. package/scripts/test-schedule-runtime.ts +309 -309
  846. package/scripts/test-scheduler-loop/scenarios-supervise.ts +25 -25
  847. package/scripts/test-sdk-surface.mjs +158 -158
  848. package/scripts/test-serial-bridge.mjs +418 -418
  849. package/scripts/test-tui-commands.mjs +148 -148
  850. package/scripts/test-tui-reducers.mjs +72 -72
  851. package/scripts/three-system-e2e/lib.mjs +79 -79
  852. package/scripts/three-system-e2e/main.mjs +40 -40
  853. package/scripts/three-system-e2e/phases/phase-0-user-token.mjs +42 -42
  854. package/scripts/three-system-e2e/phases/phase-0a2-line-autoselect.mjs +35 -35
  855. package/scripts/three-system-e2e/phases/phase-0b-fixture-grants.mjs +39 -39
  856. package/scripts/three-system-e2e/phases/phase-0c-plugin-outbound-auth.mjs +95 -95
  857. package/scripts/three-system-e2e/phases/stage-1-health.mjs +47 -47
  858. package/scripts/three-system-e2e/phases/stage-2-5-team-plugins.mjs +84 -84
  859. package/scripts/three-system-e2e/phases/stage-2-teams-tools-hitl.mjs +184 -184
  860. package/scripts/three-system-e2e/phases/stage-3-diag.mjs +73 -73
  861. package/scripts/three-system-e2e/phases/stage-4-plugin-toggle.mjs +53 -53
  862. package/scripts/three-system-e2e/state.mjs +87 -87
  863. package/scripts/three-system-e2e.mjs +40 -40
  864. package/scripts/tool-face-batch-identity-e2e.mjs +222 -222
  865. package/scripts/tsconfig.json +14 -14
  866. package/scripts/tui-smoke.mjs +100 -100
  867. package/scripts/typecheck.mjs +75 -75
  868. package/scripts/ui/admin-shots.mjs +46 -46
  869. package/scripts/ui/bump-microfont.mjs +39 -39
  870. package/scripts/ui/linkcheck2.mjs +37 -37
  871. package/scripts/ui/live-render-check.mjs +72 -72
  872. package/scripts/ui/md-lint.mjs +80 -80
  873. package/scripts/ui/perf-audit.mjs +132 -132
  874. package/scripts/ui/readme-assets.mjs +30 -30
  875. package/scripts/ui/readme-shots.mjs +42 -42
  876. package/scripts/ui/record-demo.mjs +557 -557
  877. package/scripts/ui/record.mjs +225 -225
  878. package/scripts/ui/seed-admin.mjs +68 -68
  879. package/scripts/ui/seed-demo.mjs +83 -83
  880. package/scripts/ui/seed-industrial-demo.mjs +171 -171
  881. package/scripts/ui/shot-hero.mjs +25 -25
  882. package/scripts/ui/shots.mjs +75 -75
  883. package/scripts/ui/sim-ui-shot.mjs +16 -16
  884. package/scripts/ui/smoke-refactor.mjs +258 -258
  885. package/scripts/ui/verify-nav.mjs +51 -51
  886. package/scripts/ui/verify-responsive.mjs +285 -285
  887. package/sdk/client.d.mts +110 -110
  888. package/sdk/examples/line-sentinel/index.mjs +105 -105
  889. package/sdk/examples/ops-notifier/index.mjs +34 -34
  890. package/sdk/examples/sample-insight/index.mjs +39 -39
  891. package/server/api/plugins/[name]/[...path].ts +5 -1
  892. package/server/api/plugins/client/[name].get.ts +18 -18
  893. package/server/api/plugins/i18n.get.ts +12 -12
  894. package/server/api/plugins/manifest.get.ts +10 -10
  895. package/server/api/system/backup/list.get.ts +32 -32
  896. package/server/api/system/backup/run.post.ts +21 -21
  897. package/server/api/system/config-groups/[id].delete.ts +21 -21
  898. package/server/api/system/config-groups/[id].patch.ts +26 -26
  899. package/server/api/system/config-groups/index.get.ts +21 -21
  900. package/server/api/system/config-groups/index.post.ts +33 -33
  901. package/server/api/system/timezone.get.ts +20 -20
  902. package/server/api/users/tokens/[id]/token.get.ts +11 -11
  903. package/server/api/workshop/[...path].ts +13 -13
  904. package/server/api/workshop/agent-tools/approvals/index.get.ts +43 -43
  905. package/server/api/workshop/agent-tools/bindings/[id].delete.ts +26 -26
  906. package/server/api/workshop/agent-tools/bindings/grant.post.ts +45 -45
  907. package/server/api/workshop/agent-tools/bindings/index.get.ts +41 -41
  908. package/server/api/workshop/agent-tools/bindings/revoke.post.ts +42 -42
  909. package/server/api/workshop/aml/datasets/[id]/preview.get.ts +68 -68
  910. package/server/api/workshop/aml/datasets/[id].delete.ts +39 -39
  911. package/server/api/workshop/aml/datasets/[id].get.ts +53 -53
  912. package/server/api/workshop/aml/datasets/[id].patch.ts +30 -30
  913. package/server/api/workshop/aml/datasets/index.get.ts +20 -20
  914. package/server/api/workshop/aml/datasets/index.post.ts +27 -27
  915. package/server/api/workshop/aml/entities/index.get.ts +13 -13
  916. package/server/api/workshop/aml/entities/prune.post.ts +28 -28
  917. package/server/api/workshop/aml/env/index.get.ts +13 -13
  918. package/server/api/workshop/aml/env/recheck.post.ts +14 -14
  919. package/server/api/workshop/aml/env/uv.post.ts +21 -21
  920. package/server/api/workshop/aml/env/venv.post.ts +24 -24
  921. package/server/api/workshop/aml/experiments/index.get.ts +35 -35
  922. package/server/api/workshop/aml/index.get.ts +37 -37
  923. package/server/api/workshop/aml/jobs/[id]/cancel.post.ts +21 -21
  924. package/server/api/workshop/aml/jobs/[id]/logs.get.ts +23 -23
  925. package/server/api/workshop/aml/jobs/[id]/retry.post.ts +20 -20
  926. package/server/api/workshop/aml/jobs/[id].delete.ts +44 -44
  927. package/server/api/workshop/aml/jobs/[id].get.ts +23 -23
  928. package/server/api/workshop/aml/jobs/index.get.ts +26 -26
  929. package/server/api/workshop/aml/models/[id]/predict.post.ts +24 -24
  930. package/server/api/workshop/aml/models/[id]/promote.post.ts +30 -30
  931. package/server/api/workshop/aml/models/index.get.ts +48 -48
  932. package/server/api/workshop/aml/training-plans/[id]/train.post.ts +18 -18
  933. package/server/api/workshop/aml/training-plans/[id].delete.ts +18 -18
  934. package/server/api/workshop/aml/training-plans/[id].patch.ts +30 -30
  935. package/server/api/workshop/aml/training-plans/index.get.ts +9 -9
  936. package/server/api/workshop/aml/training-plans/index.post.ts +43 -43
  937. package/server/api/workshop/approvals/[id]/decide.post.ts +30 -30
  938. package/server/api/workshop/approvals/index.get.ts +22 -22
  939. package/server/api/workshop/audit.get.ts +43 -43
  940. package/server/api/workshop/channels/[id]/chat/messages/[messageId]/read.post.ts +22 -22
  941. package/server/api/workshop/channels/[id]/chat/messages/index.get.ts +29 -29
  942. package/server/api/workshop/channels/[id]/chat/messages/index.post.ts +51 -51
  943. package/server/api/workshop/channels/[id]/chat/permissions.get.ts +35 -35
  944. package/server/api/workshop/channels/[id]/index.patch.ts +64 -64
  945. package/server/api/workshop/channels/[id]/members/[userId]/approve.post.ts +20 -20
  946. package/server/api/workshop/channels/[id]/members/[userId].delete.ts +21 -21
  947. package/server/api/workshop/channels/[id]/members/index.get.ts +23 -23
  948. package/server/api/workshop/channels/[id]/members/leave.post.ts +20 -20
  949. package/server/api/workshop/channels/[id]/twin-profile.get.ts +45 -45
  950. package/server/api/workshop/channels/[id]/twin-profile.patch.ts +72 -72
  951. package/server/api/workshop/daq/[id]/test.post.ts +1 -1
  952. package/server/api/workshop/daq/alarms.get.ts +16 -16
  953. package/server/api/workshop/dcw/[id]/write.post.ts +4 -4
  954. package/server/api/workshop/dcw/[id].delete.ts +41 -41
  955. package/server/api/workshop/dcw/[id].patch.ts +40 -40
  956. package/server/api/workshop/dcw/mes-test-read.post.ts +24 -24
  957. package/server/api/workshop/dcw/params/[id]/read.post.ts +17 -17
  958. package/server/api/workshop/dcw/params/[id]/write.post.ts +21 -21
  959. package/server/api/workshop/dcw/params/[id].delete.ts +19 -19
  960. package/server/api/workshop/dcw/params/[id].patch.ts +23 -23
  961. package/server/api/workshop/dcw/params/index.get.ts +27 -27
  962. package/server/api/workshop/dcw/params/index.post.ts +25 -25
  963. package/server/api/workshop/dcw/products/[id].delete.ts +16 -16
  964. package/server/api/workshop/dcw/products/[id].patch.ts +17 -17
  965. package/server/api/workshop/dcw/recipes/[id]/index.patch.ts +22 -22
  966. package/server/api/workshop/dcw/recipes/[id]/versions.get.ts +14 -14
  967. package/server/api/workshop/dcw/recipes/[id].delete.ts +25 -25
  968. package/server/api/workshop/dcw/recipes/index.get.ts +12 -12
  969. package/server/api/workshop/dcw/runs/[id]/close.post.ts +15 -15
  970. package/server/api/workshop/dcw/templates/[key].delete.ts +14 -14
  971. package/server/api/workshop/dcw/templates/[key].patch.ts +16 -16
  972. package/server/api/workshop/dcw/templates/index.post.ts +15 -15
  973. package/server/api/workshop/dcw/test-driver.post.ts +16 -16
  974. package/server/api/workshop/device-twins/[id].delete.ts +25 -25
  975. package/server/api/workshop/eda/runs/[id]/labels.patch.ts +25 -25
  976. package/server/api/workshop/exp/confirmations/[id]/decide.post.ts +41 -41
  977. package/server/api/workshop/exp/confirmations/index.get.ts +25 -25
  978. package/server/api/workshop/harnesses/[id]/providers.get.ts +16 -16
  979. package/server/api/workshop/hitl/respond.post.ts +94 -94
  980. package/server/api/workshop/notifications/index.get.ts +60 -60
  981. package/server/api/workshop/notifications/read.post.ts +31 -31
  982. package/server/api/workshop/ontology/drafts/[draftId]/subgraph.ts +24 -24
  983. package/server/api/workshop/plugins/[name]/disable.post.ts +21 -21
  984. package/server/api/workshop/plugins/[name]/enable.post.ts +21 -21
  985. package/server/api/workshop/plugins/[name]/index.get.ts +14 -14
  986. package/server/api/workshop/schedules/[id]/run.post.ts +15 -15
  987. package/server/api/workshop/schedules/[id]/runs.get.ts +15 -15
  988. package/server/api/workshop/schedules/[id].delete.ts +14 -14
  989. package/server/api/workshop/schedules/[id].get.ts +13 -13
  990. package/server/api/workshop/schedules/[id].patch.ts +29 -29
  991. package/server/api/workshop/schedules/index.get.ts +12 -12
  992. package/server/api/workshop/schedules/index.post.ts +32 -32
  993. package/server/api/workshop/tasks/[id]/reassign.post.ts +32 -32
  994. package/server/api/workshop/tasks/[id]/update.post.ts +35 -35
  995. package/server/api/workshop/teams/[id]/plugins/index.get.ts +36 -36
  996. package/server/api/workshop/teams/[id]/plugins/index.put.ts +42 -42
  997. package/server/api/workshop/ws/audience.ts +56 -56
  998. package/server/api/workshop/ws/db-buffer.ts +68 -68
  999. package/server/api/workshop/ws/event-mapping.ts +47 -47
  1000. package/server/api/workshop/ws/handlers.ts +132 -132
  1001. package/server/api/workshop/ws/hub.ts +133 -133
  1002. package/server/api/workshop/ws/index.ts +23 -23
  1003. package/server/api/workshop/ws/notification-uplink.ts +77 -77
  1004. package/server/api/workshop/ws/shared.ts +94 -94
  1005. package/server/api/workshop/ws/streams.ts +146 -146
  1006. package/server/middleware/00-security-headers.ts +38 -38
  1007. package/server/middleware/01-rate-guard.ts +101 -101
  1008. package/server/plugins/aml-twin-worker.ts +32 -32
  1009. package/server/plugins/dev-stability-guard.ts +42 -42
  1010. package/server/plugins-builtin/diag-bridge/client.mjs +32 -12
  1011. package/server/plugins-builtin/diag-bridge/host/constants.mjs +25 -25
  1012. package/server/plugins-builtin/diag-bridge/host/exports.mjs +104 -104
  1013. package/server/plugins-builtin/diag-bridge/host/helpers.mjs +39 -9
  1014. package/server/plugins-builtin/diag-bridge/host/index.mjs +15 -15
  1015. package/server/plugins-builtin/diag-bridge/host/intents.mjs +62 -62
  1016. package/server/plugins-builtin/diag-bridge/host/plugin.mjs +60 -26
  1017. package/server/plugins-builtin/diag-bridge/host/snapshot.mjs +93 -93
  1018. package/server/plugins-builtin/diag-bridge/index.mjs +9 -9
  1019. package/server/plugins-builtin/serial-bridge/client.mjs +211 -211
  1020. package/server/plugins-builtin/serial-bridge/drivers.mjs +409 -409
  1021. package/server/plugins-builtin/serial-bridge/i18n.json +62 -62
  1022. package/server/plugins-builtin/serial-bridge/index.mjs +247 -247
  1023. package/server/plugins-builtin/serial-bridge/lib.mjs +208 -208
  1024. package/server/plugins-builtin/serial-bridge/rtu.mjs +168 -168
  1025. package/server/services/system-config/contracts.ts +29 -29
  1026. package/server/services/system-config/dispose.ts +19 -19
  1027. package/server/services/system-config/facade.ts +26 -26
  1028. package/server/services/system-config/groups.ts +108 -108
  1029. package/server/services/system-config/index.ts +21 -21
  1030. package/server/services/system-config/init.ts +26 -26
  1031. package/server/services/system-config/mutate.ts +103 -103
  1032. package/server/services/system-config/plugins.ts +104 -104
  1033. package/server/services/system-config/snapshot.ts +59 -59
  1034. package/server/services/system-config/state.ts +79 -79
  1035. package/server/services/system-config/types.ts +58 -58
  1036. package/server/services/workshop/agents/adapters/omp-rpc-client/api.ts +111 -111
  1037. package/server/services/workshop/agents/adapters/omp-rpc-client/contracts.ts +22 -22
  1038. package/server/services/workshop/agents/adapters/omp-rpc-client/facade.ts +7 -7
  1039. package/server/services/workshop/agents/adapters/omp-rpc-client/frames.ts +0 -18
  1040. package/server/services/workshop/agents/adapters/omp-rpc-client/helpers.ts +38 -38
  1041. package/server/services/workshop/agents/adapters/omp-rpc-client/index.ts +25 -25
  1042. package/server/services/workshop/agents/adapters/omp-rpc-client/start.ts +70 -70
  1043. package/server/services/workshop/agents/adapters/omp-rpc-client/state.ts +65 -65
  1044. package/server/services/workshop/agents/adapters/omp-rpc-client/stdout.ts +92 -92
  1045. package/server/services/workshop/agents/adapters/omp-rpc-client/usage.ts +47 -47
  1046. package/server/services/workshop/agents/agent-badge.ts +38 -38
  1047. package/server/services/workshop/agents/binding-authz.ts +60 -60
  1048. package/server/services/workshop/agents/binding-mode.ts +51 -51
  1049. package/server/services/workshop/agents/codex-agent/client.ts +170 -170
  1050. package/server/services/workshop/agents/codex-agent/core.ts +119 -119
  1051. package/server/services/workshop/agents/codex-agent/facade.ts +8 -8
  1052. package/server/services/workshop/agents/codex-agent/helpers.ts +13 -13
  1053. package/server/services/workshop/agents/codex-agent/hitl.ts +138 -138
  1054. package/server/services/workshop/agents/codex-agent/index.ts +14 -14
  1055. package/server/services/workshop/agents/codex-agent/turn.ts +367 -367
  1056. package/server/services/workshop/agents/codex-agent/types.ts +42 -42
  1057. package/server/services/workshop/agents/harness-process.ts +3 -3
  1058. package/server/services/workshop/agents/harness-terminal/api.ts +197 -197
  1059. package/server/services/workshop/agents/harness-terminal/index.ts +17 -17
  1060. package/server/services/workshop/agents/harness-terminal/io.ts +120 -120
  1061. package/server/services/workshop/agents/harness-terminal/park.ts +55 -55
  1062. package/server/services/workshop/agents/harness-terminal/sanitize.ts +98 -98
  1063. package/server/services/workshop/agents/harness-terminal/session.ts +124 -124
  1064. package/server/services/workshop/agents/harness-terminal/shared.ts +74 -74
  1065. package/server/services/workshop/agents/hitl-capabilities.ts +312 -312
  1066. package/server/services/workshop/agents/hitl-decision/answers.ts +32 -32
  1067. package/server/services/workshop/agents/hitl-decision/decide.ts +268 -268
  1068. package/server/services/workshop/agents/hitl-decision/payload.ts +45 -45
  1069. package/server/services/workshop/agents/hitl-decision/shared.ts +108 -108
  1070. package/server/services/workshop/agents/hitl-decision/visibility.ts +94 -94
  1071. package/server/services/workshop/agents/host-tool-bridge/tools/progress.ts +84 -84
  1072. package/server/services/workshop/agents/host-tool-bridge/tools/team-delegation.ts +104 -104
  1073. package/server/services/workshop/agents/host-tool-bridge/tools/team.ts +70 -70
  1074. package/server/services/workshop/agents/industrial/aml-activity.ts +131 -131
  1075. package/server/services/workshop/agents/industrial/audit-query.ts +66 -66
  1076. package/server/services/workshop/agents/industrial/daq-tools.ts +352 -352
  1077. package/server/services/workshop/agents/industrial/exp-tools.ts +104 -104
  1078. package/server/services/workshop/agents/industrial/ops-tools.ts +16 -54
  1079. package/server/services/workshop/agents/industrial/param-tools.ts +69 -69
  1080. package/server/services/workshop/agents/industrial/recipe-gate.ts +6 -19
  1081. package/server/services/workshop/agents/industrial/recipe-propose-tools.ts +1 -1
  1082. package/server/services/workshop/agents/node-bindings.repo.ts +207 -207
  1083. package/server/services/workshop/agents/node-delegation.ts +159 -159
  1084. package/server/services/workshop/agents/omp-agent/core.ts +146 -146
  1085. package/server/services/workshop/agents/omp-agent/facade.ts +8 -8
  1086. package/server/services/workshop/agents/omp-agent/helpers.ts +37 -37
  1087. package/server/services/workshop/agents/omp-agent/index.ts +16 -16
  1088. package/server/services/workshop/agents/omp-agent/tools-steer.ts +1 -18
  1089. package/server/services/workshop/agents/omp-agent/types.ts +45 -45
  1090. package/server/services/workshop/agents/opencode-agent/core.ts +77 -77
  1091. package/server/services/workshop/agents/opencode-agent/facade.ts +8 -8
  1092. package/server/services/workshop/agents/opencode-agent/helpers.ts +29 -29
  1093. package/server/services/workshop/agents/opencode-agent/hitl.ts +113 -113
  1094. package/server/services/workshop/agents/opencode-agent/index.ts +16 -16
  1095. package/server/services/workshop/agents/opencode-agent/lifecycle.ts +44 -44
  1096. package/server/services/workshop/agents/opencode-agent/server.ts +244 -244
  1097. package/server/services/workshop/agents/opencode-agent/turn.ts +278 -278
  1098. package/server/services/workshop/agents/opencode-agent/types.ts +54 -54
  1099. package/server/services/workshop/agents/tool-classes.ts +44 -44
  1100. package/server/services/workshop/aml/clean.ts +120 -120
  1101. package/server/services/workshop/aml/entity.ts +367 -367
  1102. package/server/services/workshop/aml/job-orchestrator/broadcast.ts +37 -37
  1103. package/server/services/workshop/aml/job-orchestrator/control.ts +94 -94
  1104. package/server/services/workshop/aml/job-orchestrator/failure.ts +96 -96
  1105. package/server/services/workshop/aml/job-orchestrator/index.ts +22 -22
  1106. package/server/services/workshop/aml/job-orchestrator/process.ts +101 -101
  1107. package/server/services/workshop/aml/job-orchestrator/shared.ts +53 -53
  1108. package/server/services/workshop/aml/job-orchestrator/status.ts +20 -20
  1109. package/server/services/workshop/aml/job-orchestrator/tick.ts +37 -37
  1110. package/server/services/workshop/aml/python/train-example.py +92 -92
  1111. package/server/services/workshop/aml/runtime.ts +137 -137
  1112. package/server/services/workshop/aml/stats.ts +140 -140
  1113. package/server/services/workshop/aml/twin/calibration-worker.ts +150 -150
  1114. package/server/services/workshop/aml/twin/model-backed-provider.ts +332 -332
  1115. package/server/services/workshop/aml/twin/physics-spec-draft.ts +185 -185
  1116. package/server/services/workshop/aml/twin/prompt-composer.ts +143 -143
  1117. package/server/services/workshop/aml/twin/training-plans.ts +260 -260
  1118. package/server/services/workshop/aml/twin/write-guard.ts +19 -19
  1119. package/server/services/workshop/assets/character-asset.repo.ts +1 -1
  1120. package/server/services/workshop/assets/device-twin.repo.ts +1 -1
  1121. package/server/services/workshop/daq/bus/index.ts +5 -12
  1122. package/server/services/workshop/daq/daq-controller/contracts.ts +39 -39
  1123. package/server/services/workshop/daq/daq-controller/facade.ts +28 -28
  1124. package/server/services/workshop/daq/daq-controller/frames.ts +137 -137
  1125. package/server/services/workshop/daq/daq-controller/helpers.ts +52 -52
  1126. package/server/services/workshop/daq/daq-controller/index.ts +22 -22
  1127. package/server/services/workshop/daq/daq-controller/runtime-control.ts +72 -72
  1128. package/server/services/workshop/daq/daq-controller/sweep-alarms.ts +176 -176
  1129. package/server/services/workshop/daq/daq-controller/tsdb-twin.ts +138 -138
  1130. package/server/services/workshop/daq/drivers/http.ts +95 -95
  1131. package/server/services/workshop/daq/drivers/mock.ts +130 -130
  1132. package/server/services/workshop/daq/drivers/modbus-rtu.ts +67 -67
  1133. package/server/services/workshop/daq/drivers/modbus-tcp.ts +307 -307
  1134. package/server/services/workshop/daq/drivers/opcua.ts +227 -227
  1135. package/server/services/workshop/daq/drivers/s7-stub.ts +29 -29
  1136. package/server/services/workshop/daq/host-bindings.ts +71 -71
  1137. package/server/services/workshop/daq/host-ports.ts +65 -65
  1138. package/server/services/workshop/db/aml-team-seeds.ts +118 -118
  1139. package/server/services/workshop/db/backup-registry.ts +33 -33
  1140. package/server/services/workshop/db/channel-member.repo.ts +122 -122
  1141. package/server/services/workshop/db/channel.repo.ts +203 -203
  1142. package/server/services/workshop/db/chat-message.repo.ts +233 -233
  1143. package/server/services/workshop/db/database/index.ts +18 -18
  1144. package/server/services/workshop/db/database/json.ts +14 -14
  1145. package/server/services/workshop/db/database/open.ts +97 -97
  1146. package/server/services/workshop/db/database/seed-data.ts +60 -60
  1147. package/server/services/workshop/db/hitl-request.repo.ts +221 -221
  1148. package/server/services/workshop/db/notification.repo.ts +199 -199
  1149. package/server/services/workshop/db/readonly.ts +30 -30
  1150. package/server/services/workshop/db/scheduled-task.repo.ts +235 -235
  1151. package/server/services/workshop/db/transaction.ts +72 -72
  1152. package/server/services/workshop/dcw/dcw-controller/contracts.ts +16 -16
  1153. package/server/services/workshop/dcw/dcw-controller/control.ts +78 -78
  1154. package/server/services/workshop/dcw/dcw-controller/facade.ts +19 -19
  1155. package/server/services/workshop/dcw/dcw-controller/index.ts +22 -22
  1156. package/server/services/workshop/dcw/dcw-controller/params.ts +97 -97
  1157. package/server/services/workshop/dcw/dcw-controller/products.ts +103 -103
  1158. package/server/services/workshop/dcw/dcw-controller/write-audit.ts +49 -49
  1159. package/server/services/workshop/dcw/dcw-templates.ts +136 -136
  1160. package/server/services/workshop/dcw/param-conversion.ts +78 -78
  1161. package/server/services/workshop/dcw/param-map.repo.ts +349 -349
  1162. package/server/services/workshop/dcw/plugin-bridge.ts +45 -45
  1163. package/server/services/workshop/dcw/recipe-rollback-manager/contracts.ts +26 -26
  1164. package/server/services/workshop/dcw/recipe-rollback-manager/facade.ts +13 -13
  1165. package/server/services/workshop/dcw/recipe-rollback-manager/helpers.ts +30 -30
  1166. package/server/services/workshop/dcw/recipe-rollback-manager/index.ts +17 -17
  1167. package/server/services/workshop/dcw/recipe-rollback-manager/internal.ts +33 -33
  1168. package/server/services/workshop/dcw/recipe-rollback-manager/judge.ts +52 -52
  1169. package/server/services/workshop/dcw/recipe-rollback-manager/lock.ts +137 -137
  1170. package/server/services/workshop/dcw/recipe-rollback-manager/rollback.ts +190 -190
  1171. package/server/services/workshop/dcw/recipe-rollback-manager/state.ts +21 -21
  1172. package/server/services/workshop/dcw/recipe-rollback-manager/sweep.ts +77 -77
  1173. package/server/services/workshop/dcw/recipe-rollback-manager/types.ts +3 -3
  1174. package/server/services/workshop/dcw/recipe-rollback-manager/views.ts +214 -214
  1175. package/server/services/workshop/exp/exp-collector.ts +275 -275
  1176. package/server/services/workshop/exp/exp-state.repo.ts +339 -339
  1177. package/server/services/workshop/mes/mes-controller.ts +1155 -1155
  1178. package/server/services/workshop/mes/mes-hook.ts +567 -567
  1179. package/server/services/workshop/ontology/subgraph.core.ts +300 -300
  1180. package/server/services/workshop/ontology/subgraph.service.ts +113 -113
  1181. package/server/services/workshop/plugins/host/api.mjs +90 -90
  1182. package/server/services/workshop/plugins/host/config.mjs +135 -135
  1183. package/server/services/workshop/plugins/host/index.mjs +23 -23
  1184. package/server/services/workshop/plugins/host/init.mjs +109 -109
  1185. package/server/services/workshop/plugins/host/load.mjs +321 -321
  1186. package/server/services/workshop/plugins/host/reload.mjs +94 -94
  1187. package/server/services/workshop/plugins/host/rollback.mjs +72 -72
  1188. package/server/services/workshop/plugins/host/state.mjs +54 -54
  1189. package/server/services/workshop/plugins/host/toggle.mjs +64 -64
  1190. package/server/services/workshop/plugins/host.mjs +9 -9
  1191. package/server/services/workshop/runtime/agent-runtime/facade.ts +7 -7
  1192. package/server/services/workshop/runtime/agent-runtime/helpers.ts +18 -18
  1193. package/server/services/workshop/runtime/agent-runtime/index.ts +19 -19
  1194. package/server/services/workshop/runtime/agent-runtime/lifecycle.ts +137 -137
  1195. package/server/services/workshop/runtime/chat-mention.ts +164 -164
  1196. package/server/services/workshop/runtime/chat-projection.ts +246 -246
  1197. package/server/services/workshop/runtime/manager/admin-agents.ts +268 -268
  1198. package/server/services/workshop/runtime/manager/bus.ts +182 -182
  1199. package/server/services/workshop/runtime/manager/channel-template-constants.ts +20 -20
  1200. package/server/services/workshop/runtime/manager/chat-reply.ts +181 -181
  1201. package/server/services/workshop/runtime/manager/chat.ts +384 -384
  1202. package/server/services/workshop/runtime/manager/facade.ts +24 -24
  1203. package/server/services/workshop/runtime/manager/helpers.ts +119 -119
  1204. package/server/services/workshop/runtime/manager/index.ts +42 -42
  1205. package/server/services/workshop/runtime/manager/internal.ts +73 -73
  1206. package/server/services/workshop/runtime/manager/notifications.ts +108 -108
  1207. package/server/services/workshop/runtime/manager/teams.ts +148 -148
  1208. package/server/services/workshop/runtime/memory/contracts.ts +18 -18
  1209. package/server/services/workshop/runtime/memory/facade.ts +10 -10
  1210. package/server/services/workshop/runtime/memory/helpers.ts +196 -196
  1211. package/server/services/workshop/runtime/memory/index.ts +27 -27
  1212. package/server/services/workshop/runtime/memory/score.ts +33 -33
  1213. package/server/services/workshop/runtime/memory/state.ts +40 -40
  1214. package/server/services/workshop/runtime/monitor.ts +3 -3
  1215. package/server/services/workshop/runtime/platform-notice.ts +113 -113
  1216. package/server/services/workshop/runtime/schedule-runtime.ts +347 -347
  1217. package/server/services/workshop/runtime/scheduler-loop/contracts.ts +29 -29
  1218. package/server/services/workshop/runtime/scheduler-loop/facade.ts +7 -7
  1219. package/server/services/workshop/runtime/scheduler-loop/helpers.ts +14 -14
  1220. package/server/services/workshop/runtime/scheduler-loop/index.ts +16 -16
  1221. package/server/services/workshop/runtime/task-engine/facade.ts +7 -7
  1222. package/server/services/workshop/runtime/task-engine/index.ts +15 -15
  1223. package/server/services/workshop/runtime/task-engine/types.ts +3 -3
  1224. package/server/services/workshop/runtime/user-notification-hub.ts +192 -192
  1225. package/server/types/pg.d.ts +49 -49
  1226. package/server/utils/approval-gate.ts +67 -67
  1227. package/server/utils/mojibake-guard.ts +29 -29
  1228. package/server/utils/stability-severity.ts +77 -77
  1229. package/shared/config/groups.mjs +241 -241
  1230. package/shared/dcw-protocol/catalog.ts +232 -232
  1231. package/shared/dcw-protocol/closed-loop.ts +137 -137
  1232. package/shared/lru.mjs +97 -97
  1233. package/tui/README.md +74 -74
  1234. package/tui/aw-tui.mjs +445 -445
  1235. package/tui/commands/index.mjs +287 -287
  1236. package/tui/components/chat-log.mjs +42 -42
  1237. package/tui/components/monitor-pane.mjs +39 -39
  1238. package/tui/components/root.mjs +53 -53
  1239. package/tui/components/status-bar.mjs +33 -33
  1240. package/tui/lib/api.mjs +82 -82
  1241. package/tui/lib/pickers.mjs +121 -121
  1242. package/tui/lib/reducers.mjs +218 -218
  1243. package/tui/lib/state.mjs +86 -86
  1244. package/tui/lib/virtual-terminal.mjs +48 -48
  1245. package/tui/lib/ws.mjs +125 -125
  1246. package/tui/theme.mjs +38 -38
  1247. package/.output/.AgentWorkShop/aml-python/__pycache__/aml_eval.cpython-312.pyc +0 -0
  1248. package/.output/.AgentWorkShop/aml-python/__pycache__/amlkit.cpython-312.pyc +0 -0
  1249. package/.output/.AgentWorkShop/aml-python/__pycache__/train-example.cpython-312.pyc +0 -0
  1250. package/.output/.AgentWorkShop/aml-python/__pycache__/train-hybrid-example.cpython-312.pyc +0 -0
  1251. package/.output/public/_nuxt/BRYBzVMJ.js +0 -1
  1252. package/.output/public/_nuxt/BW2uTUx52.js +0 -2
  1253. package/.output/public/_nuxt/BtZKe9ZV.js +0 -1
  1254. package/.output/public/_nuxt/CfFUK6932.js +0 -2
  1255. package/.output/public/_nuxt/DhW7cFOa.js +0 -1
  1256. package/.output/public/_nuxt/OmpTerminalPanel.ComMDrA8.css +0 -1
  1257. package/.output/public/_nuxt/PluginSlot.CGH0vb95.css +0 -1
  1258. package/.output/public/_nuxt/TownView.CC3t-Dte.css +0 -1
  1259. package/.output/public/_nuxt/aml.PalMp-5n.css +0 -1
  1260. package/.output/public/_nuxt/builds/meta/fa0af8b5-3929-428d-a6de-3b5cc6b8248f.json +0 -1
  1261. package/.output/public/_nuxt/permissions.DxuOOIqQ.css +0 -1
  1262. package/.output/public/_nuxt/schedules.BXNJ9q_I.css +0 -1
  1263. package/.output/public/_nuxt/tools.BwXFAb-X.css +0 -1
  1264. package/.output/server/chunks/build/AuthGate-nF1evO4v.mjs +0 -716
  1265. package/.output/server/chunks/build/AuthGate-nF1evO4v.mjs.map +0 -1
  1266. package/.output/server/chunks/build/FormItemContext-BlyzocS0.mjs +0 -72
  1267. package/.output/server/chunks/build/FormItemContext-BlyzocS0.mjs.map +0 -1
  1268. package/.output/server/chunks/build/OmpTerminalPanel-BhvhQ1gG.mjs +0 -942
  1269. package/.output/server/chunks/build/OmpTerminalPanel-BhvhQ1gG.mjs.map +0 -1
  1270. package/.output/server/chunks/build/PluginSlot-BUKXwV2X.mjs +0 -141
  1271. package/.output/server/chunks/build/PluginSlot-BUKXwV2X.mjs.map +0 -1
  1272. package/.output/server/chunks/build/TownView-BWMDbosY.mjs +0 -6489
  1273. package/.output/server/chunks/build/TownView-BWMDbosY.mjs.map +0 -1
  1274. package/.output/server/chunks/build/_id_-BK-t8nRG.mjs +0 -392
  1275. package/.output/server/chunks/build/_id_-BK-t8nRG.mjs.map +0 -1
  1276. package/.output/server/chunks/build/_id_-CZPlPDm4.mjs +0 -2045
  1277. package/.output/server/chunks/build/_id_-CZPlPDm4.mjs.map +0 -1
  1278. package/.output/server/chunks/build/_wsId_-BPy-Aj9L.mjs +0 -14297
  1279. package/.output/server/chunks/build/_wsId_-BPy-Aj9L.mjs.map +0 -1
  1280. package/.output/server/chunks/build/agents-CpNLdI8E.mjs +0 -1078
  1281. package/.output/server/chunks/build/agents-CpNLdI8E.mjs.map +0 -1
  1282. package/.output/server/chunks/build/alert-D0ivtTGy.mjs +0 -263
  1283. package/.output/server/chunks/build/alert-D0ivtTGy.mjs.map +0 -1
  1284. package/.output/server/chunks/build/aml-DRAFRcGU.mjs +0 -814
  1285. package/.output/server/chunks/build/aml-DRAFRcGU.mjs.map +0 -1
  1286. package/.output/server/chunks/build/analysis-p-dBkjoK.mjs +0 -533
  1287. package/.output/server/chunks/build/analysis-p-dBkjoK.mjs.map +0 -1
  1288. package/.output/server/chunks/build/api-B4Om0mEc.mjs.map +0 -1
  1289. package/.output/server/chunks/build/api-BEW_ebY_.mjs.map +0 -1
  1290. package/.output/server/chunks/build/api-BsAgXWxi.mjs.map +0 -1
  1291. package/.output/server/chunks/build/api-error-BwAQLw44.mjs +0 -47
  1292. package/.output/server/chunks/build/api-error-BwAQLw44.mjs.map +0 -1
  1293. package/.output/server/chunks/build/apiClient-BvXtNzC8.mjs +0 -81
  1294. package/.output/server/chunks/build/apiClient-BvXtNzC8.mjs.map +0 -1
  1295. package/.output/server/chunks/build/board-Dl2Ar22r.mjs +0 -178
  1296. package/.output/server/chunks/build/board-Dl2Ar22r.mjs.map +0 -1
  1297. package/.output/server/chunks/build/card-Cqk0Ur-L.mjs +0 -953
  1298. package/.output/server/chunks/build/card-Cqk0Ur-L.mjs.map +0 -1
  1299. package/.output/server/chunks/build/channel-templates-ByHOQQkO.mjs +0 -942
  1300. package/.output/server/chunks/build/channel-templates-ByHOQQkO.mjs.map +0 -1
  1301. package/.output/server/chunks/build/checkbox-CrT4cnfu.mjs +0 -439
  1302. package/.output/server/chunks/build/checkbox-CrT4cnfu.mjs.map +0 -1
  1303. package/.output/server/chunks/build/client-only-qNA2OVV_.mjs +0 -43
  1304. package/.output/server/chunks/build/client-only-qNA2OVV_.mjs.map +0 -1
  1305. package/.output/server/chunks/build/core-CgTOPS4t.mjs +0 -294
  1306. package/.output/server/chunks/build/core-CgTOPS4t.mjs.map +0 -1
  1307. package/.output/server/chunks/build/daq-CdxcfY_G.mjs +0 -1266
  1308. package/.output/server/chunks/build/daq-CdxcfY_G.mjs.map +0 -1
  1309. package/.output/server/chunks/build/data-D8uX1dnm.mjs +0 -481
  1310. package/.output/server/chunks/build/data-D8uX1dnm.mjs.map +0 -1
  1311. package/.output/server/chunks/build/dcw-BlDQtS4q.mjs +0 -505
  1312. package/.output/server/chunks/build/dcw-BlDQtS4q.mjs.map +0 -1
  1313. package/.output/server/chunks/build/default-CNWS6NUw.mjs +0 -2353
  1314. package/.output/server/chunks/build/default-CNWS6NUw.mjs.map +0 -1
  1315. package/.output/server/chunks/build/descriptions-BNlfKG9y.mjs +0 -406
  1316. package/.output/server/chunks/build/descriptions-BNlfKG9y.mjs.map +0 -1
  1317. package/.output/server/chunks/build/drawer-Caji0PLs.mjs +0 -834
  1318. package/.output/server/chunks/build/drawer-Caji0PLs.mjs.map +0 -1
  1319. package/.output/server/chunks/build/dropdown-BNwTVGde.mjs +0 -14
  1320. package/.output/server/chunks/build/dropdown-BNwTVGde.mjs.map +0 -1
  1321. package/.output/server/chunks/build/dropdown-Cd-xPhR6.mjs +0 -540
  1322. package/.output/server/chunks/build/dropdown-Cd-xPhR6.mjs.map +0 -1
  1323. package/.output/server/chunks/build/es-Bxu10NJ2.mjs.map +0 -1
  1324. package/.output/server/chunks/build/firstNotUndefined-8H5_qHUu.mjs +0 -2448
  1325. package/.output/server/chunks/build/firstNotUndefined-8H5_qHUu.mjs.map +0 -1
  1326. package/.output/server/chunks/build/form-D_UpWPN4.mjs +0 -4712
  1327. package/.output/server/chunks/build/form-D_UpWPN4.mjs.map +0 -1
  1328. package/.output/server/chunks/build/hasIn-DBdElbjM.mjs +0 -553
  1329. package/.output/server/chunks/build/hasIn-DBdElbjM.mjs.map +0 -1
  1330. package/.output/server/chunks/build/hitl-Bd30yr1J.mjs +0 -132
  1331. package/.output/server/chunks/build/hitl-Bd30yr1J.mjs.map +0 -1
  1332. package/.output/server/chunks/build/input-GtPuSEgt.mjs +0 -2181
  1333. package/.output/server/chunks/build/input-GtPuSEgt.mjs.map +0 -1
  1334. package/.output/server/chunks/build/input-number-BNlNDK7H.mjs +0 -1120
  1335. package/.output/server/chunks/build/input-number-BNlNDK7H.mjs.map +0 -1
  1336. package/.output/server/chunks/build/interval-DvHBIIZh.mjs +0 -9
  1337. package/.output/server/chunks/build/interval-DvHBIIZh.mjs.map +0 -1
  1338. package/.output/server/chunks/build/isNumeric-CP7q_yhz.mjs +0 -7
  1339. package/.output/server/chunks/build/isNumeric-CP7q_yhz.mjs.map +0 -1
  1340. package/.output/server/chunks/build/logs-pRb-TMWa.mjs +0 -427
  1341. package/.output/server/chunks/build/logs-pRb-TMWa.mjs.map +0 -1
  1342. package/.output/server/chunks/build/menu-BXt-X0dt.mjs +0 -1952
  1343. package/.output/server/chunks/build/menu-BXt-X0dt.mjs.map +0 -1
  1344. package/.output/server/chunks/build/monitor-Cq6hRFeQ.mjs +0 -2253
  1345. package/.output/server/chunks/build/monitor-Cq6hRFeQ.mjs.map +0 -1
  1346. package/.output/server/chunks/build/ontology-DK0Mf0zT.mjs +0 -1406
  1347. package/.output/server/chunks/build/ontology-DK0Mf0zT.mjs.map +0 -1
  1348. package/.output/server/chunks/build/operations-SMQrRAcr.mjs +0 -311
  1349. package/.output/server/chunks/build/operations-SMQrRAcr.mjs.map +0 -1
  1350. package/.output/server/chunks/build/optimizer-BlWTsM-W.mjs +0 -202
  1351. package/.output/server/chunks/build/optimizer-BlWTsM-W.mjs.map +0 -1
  1352. package/.output/server/chunks/build/pages-AFRP4-EL.mjs +0 -542
  1353. package/.output/server/chunks/build/pages-AFRP4-EL.mjs.map +0 -1
  1354. package/.output/server/chunks/build/pagination-DTAconUo.mjs +0 -1346
  1355. package/.output/server/chunks/build/pagination-DTAconUo.mjs.map +0 -1
  1356. package/.output/server/chunks/build/permissions-DgXQZSyx.mjs +0 -637
  1357. package/.output/server/chunks/build/permissions-DgXQZSyx.mjs.map +0 -1
  1358. package/.output/server/chunks/build/plugins-LRjaSEZy.mjs +0 -272
  1359. package/.output/server/chunks/build/plugins-LRjaSEZy.mjs.map +0 -1
  1360. package/.output/server/chunks/build/popconfirm-DxYPGRgS.mjs +0 -340
  1361. package/.output/server/chunks/build/popconfirm-DxYPGRgS.mjs.map +0 -1
  1362. package/.output/server/chunks/build/responsiveObserve-DM3hpzhU.mjs +0 -78
  1363. package/.output/server/chunks/build/responsiveObserve-DM3hpzhU.mjs.map +0 -1
  1364. package/.output/server/chunks/build/schedules-dSnr8url.mjs +0 -7172
  1365. package/.output/server/chunks/build/schedules-dSnr8url.mjs.map +0 -1
  1366. package/.output/server/chunks/build/segmented-D3HWtHPw.mjs +0 -341
  1367. package/.output/server/chunks/build/segmented-D3HWtHPw.mjs.map +0 -1
  1368. package/.output/server/chunks/build/select-B3Dsb9yq.mjs +0 -3923
  1369. package/.output/server/chunks/build/select-B3Dsb9yq.mjs.map +0 -1
  1370. package/.output/server/chunks/build/settings-BrIhnS2Z.mjs +0 -1014
  1371. package/.output/server/chunks/build/settings-BrIhnS2Z.mjs.map +0 -1
  1372. package/.output/server/chunks/build/space-Dwu2Skt8.mjs +0 -110
  1373. package/.output/server/chunks/build/space-Dwu2Skt8.mjs.map +0 -1
  1374. package/.output/server/chunks/build/spin-C2cuvGth.mjs +0 -357
  1375. package/.output/server/chunks/build/spin-C2cuvGth.mjs.map +0 -1
  1376. package/.output/server/chunks/build/studio-cdoNCfyy.mjs +0 -332
  1377. package/.output/server/chunks/build/studio-cdoNCfyy.mjs.map +0 -1
  1378. package/.output/server/chunks/build/switch-CyR-H6Fb.mjs +0 -377
  1379. package/.output/server/chunks/build/switch-CyR-H6Fb.mjs.map +0 -1
  1380. package/.output/server/chunks/build/table-CmVD-cA9.mjs +0 -7546
  1381. package/.output/server/chunks/build/table-CmVD-cA9.mjs.map +0 -1
  1382. package/.output/server/chunks/build/tabs-Vg0e7cZE.mjs +0 -1924
  1383. package/.output/server/chunks/build/tabs-Vg0e7cZE.mjs.map +0 -1
  1384. package/.output/server/chunks/build/tag-y0sn-xv9.mjs +0 -1156
  1385. package/.output/server/chunks/build/tag-y0sn-xv9.mjs.map +0 -1
  1386. package/.output/server/chunks/build/teams-B1d32eHK.mjs +0 -1203
  1387. package/.output/server/chunks/build/teams-B1d32eHK.mjs.map +0 -1
  1388. package/.output/server/chunks/build/tokens-GYaGJ35Z.mjs +0 -1062
  1389. package/.output/server/chunks/build/tokens-GYaGJ35Z.mjs.map +0 -1
  1390. package/.output/server/chunks/build/tools-s_9U1Djj.mjs +0 -487
  1391. package/.output/server/chunks/build/tools-s_9U1Djj.mjs.map +0 -1
  1392. package/.output/server/chunks/build/tooltip-C2n2nNiQ.mjs +0 -920
  1393. package/.output/server/chunks/build/tooltip-C2n2nNiQ.mjs.map +0 -1
  1394. package/.output/server/chunks/build/town-B5aoiG98.mjs +0 -133
  1395. package/.output/server/chunks/build/town-B5aoiG98.mjs.map +0 -1
  1396. package/.output/server/chunks/build/useAgentHarnessOptions-DOrQHeBh.mjs +0 -124
  1397. package/.output/server/chunks/build/useAgentHarnessOptions-DOrQHeBh.mjs.map +0 -1
  1398. package/.output/server/chunks/build/useAgentTemplateActions-CzlplRWh.mjs +0 -77
  1399. package/.output/server/chunks/build/useAgentTemplateActions-CzlplRWh.mjs.map +0 -1
  1400. package/.output/server/chunks/build/useAgentTemplateForm-DQo1enf2.mjs +0 -117
  1401. package/.output/server/chunks/build/useAgentTemplateForm-DQo1enf2.mjs.map +0 -1
  1402. package/.output/server/chunks/build/useAgentTemplatesCatalog-DP-iMmqz.mjs +0 -133
  1403. package/.output/server/chunks/build/useAgentTemplatesCatalog-DP-iMmqz.mjs.map +0 -1
  1404. package/.output/server/chunks/build/useAmlDatasets-DeoE1idn.mjs +0 -92
  1405. package/.output/server/chunks/build/useAmlDatasets-DeoE1idn.mjs.map +0 -1
  1406. package/.output/server/chunks/build/useAmlEntities-BJhvdqHJ.mjs +0 -86
  1407. package/.output/server/chunks/build/useAmlEntities-BJhvdqHJ.mjs.map +0 -1
  1408. package/.output/server/chunks/build/useAmlEnv-CDIZ6xTe.mjs +0 -194
  1409. package/.output/server/chunks/build/useAmlEnv-CDIZ6xTe.mjs.map +0 -1
  1410. package/.output/server/chunks/build/useAmlExperiments-Dloi834i.mjs +0 -89
  1411. package/.output/server/chunks/build/useAmlExperiments-Dloi834i.mjs.map +0 -1
  1412. package/.output/server/chunks/build/useAmlJobs-BF9LpwXz.mjs +0 -267
  1413. package/.output/server/chunks/build/useAmlJobs-BF9LpwXz.mjs.map +0 -1
  1414. package/.output/server/chunks/build/useAmlModels-_bweOr3R.mjs +0 -93
  1415. package/.output/server/chunks/build/useAmlModels-_bweOr3R.mjs.map +0 -1
  1416. package/.output/server/chunks/build/useAmlNotes-DQj980iX.mjs +0 -86
  1417. package/.output/server/chunks/build/useAmlNotes-DQj980iX.mjs.map +0 -1
  1418. package/.output/server/chunks/build/useAmlPredict-DHNgDSJn.mjs +0 -130
  1419. package/.output/server/chunks/build/useAmlPredict-DHNgDSJn.mjs.map +0 -1
  1420. package/.output/server/chunks/build/useAnalysisFeed-BrEGV_9x.mjs +0 -129
  1421. package/.output/server/chunks/build/useAnalysisFeed-BrEGV_9x.mjs.map +0 -1
  1422. package/.output/server/chunks/build/useDaqAddNode-D_Rkju0f.mjs +0 -142
  1423. package/.output/server/chunks/build/useDaqAddNode-D_Rkju0f.mjs.map +0 -1
  1424. package/.output/server/chunks/build/useDaqDetailBinding-DCWaLKXT.mjs +0 -70
  1425. package/.output/server/chunks/build/useDaqDetailBinding-DCWaLKXT.mjs.map +0 -1
  1426. package/.output/server/chunks/build/useDaqDetailFrames-BOIcOJRB.mjs +0 -79
  1427. package/.output/server/chunks/build/useDaqDetailFrames-BOIcOJRB.mjs.map +0 -1
  1428. package/.output/server/chunks/build/useDaqDetailHistory-D6WulPVs.mjs +0 -176
  1429. package/.output/server/chunks/build/useDaqDetailHistory-D6WulPVs.mjs.map +0 -1
  1430. package/.output/server/chunks/build/useDaqDetailNode-DeOsDxK5.mjs +0 -99
  1431. package/.output/server/chunks/build/useDaqDetailNode-DeOsDxK5.mjs.map +0 -1
  1432. package/.output/server/chunks/build/useDaqDetailParams-Cm9a9r5G.mjs +0 -159
  1433. package/.output/server/chunks/build/useDaqDetailParams-Cm9a9r5G.mjs.map +0 -1
  1434. package/.output/server/chunks/build/useDaqFilters-CctmO03p.mjs +0 -222
  1435. package/.output/server/chunks/build/useDaqFilters-CctmO03p.mjs.map +0 -1
  1436. package/.output/server/chunks/build/useDaqOptimizations-CmX_dpBc.mjs +0 -136
  1437. package/.output/server/chunks/build/useDaqOptimizations-CmX_dpBc.mjs.map +0 -1
  1438. package/.output/server/chunks/build/useDaqStream-B9ZBVQrI.mjs +0 -395
  1439. package/.output/server/chunks/build/useDaqStream-B9ZBVQrI.mjs.map +0 -1
  1440. package/.output/server/chunks/build/useDaqTemplates-CK37sMfi.mjs +0 -187
  1441. package/.output/server/chunks/build/useDaqTemplates-CK37sMfi.mjs.map +0 -1
  1442. package/.output/server/chunks/build/useDashboardData-B36wVWo2.mjs +0 -153
  1443. package/.output/server/chunks/build/useDashboardData-B36wVWo2.mjs.map +0 -1
  1444. package/.output/server/chunks/build/useDcwAddNode-DACVcEHs.mjs +0 -219
  1445. package/.output/server/chunks/build/useDcwAddNode-DACVcEHs.mjs.map +0 -1
  1446. package/.output/server/chunks/build/useDcwCards-SaiImIYQ.mjs.map +0 -1
  1447. package/.output/server/chunks/build/useDcwDetailScope-DLOklSMO.mjs +0 -184
  1448. package/.output/server/chunks/build/useDcwDetailScope-DLOklSMO.mjs.map +0 -1
  1449. package/.output/server/chunks/build/useDcwDetailTemplates-ClmIdZ40.mjs +0 -148
  1450. package/.output/server/chunks/build/useDcwDetailTemplates-ClmIdZ40.mjs.map +0 -1
  1451. package/.output/server/chunks/build/useDcwFilter-CPMyCltx.mjs +0 -71
  1452. package/.output/server/chunks/build/useDcwFilter-CPMyCltx.mjs.map +0 -1
  1453. package/.output/server/chunks/build/useDcwLedger-0ie-0WTc.mjs.map +0 -1
  1454. package/.output/server/chunks/build/useDcwLineMutations-DNxo66yM.mjs +0 -137
  1455. package/.output/server/chunks/build/useDcwLineMutations-DNxo66yM.mjs.map +0 -1
  1456. package/.output/server/chunks/build/useDcwLineRun-CHskwscT.mjs +0 -104
  1457. package/.output/server/chunks/build/useDcwLineRun-CHskwscT.mjs.map +0 -1
  1458. package/.output/server/chunks/build/useDcwParamApprovals-DtScUc-W.mjs +0 -121
  1459. package/.output/server/chunks/build/useDcwParamApprovals-DtScUc-W.mjs.map +0 -1
  1460. package/.output/server/chunks/build/useDcwProducts-BMaxzLu6.mjs +0 -93
  1461. package/.output/server/chunks/build/useDcwProducts-BMaxzLu6.mjs.map +0 -1
  1462. package/.output/server/chunks/build/useDcwQuery-TVU3Eo0M.mjs +0 -98
  1463. package/.output/server/chunks/build/useDcwQuery-TVU3Eo0M.mjs.map +0 -1
  1464. package/.output/server/chunks/build/useDcwQuickActions-BREFmR9T.mjs +0 -88
  1465. package/.output/server/chunks/build/useDcwQuickActions-BREFmR9T.mjs.map +0 -1
  1466. package/.output/server/chunks/build/useDcwRecipes-Bc9urA1N.mjs +0 -258
  1467. package/.output/server/chunks/build/useDcwRecipes-Bc9urA1N.mjs.map +0 -1
  1468. package/.output/server/chunks/build/useDcwStream-Dir5ufAU.mjs +0 -452
  1469. package/.output/server/chunks/build/useDcwStream-Dir5ufAU.mjs.map +0 -1
  1470. package/.output/server/chunks/build/useDcwTemplates-BzagZztS.mjs +0 -91
  1471. package/.output/server/chunks/build/useDcwTemplates-BzagZztS.mjs.map +0 -1
  1472. package/.output/server/chunks/build/useDcwWrites-BROwTLCn.mjs +0 -140
  1473. package/.output/server/chunks/build/useDcwWrites-BROwTLCn.mjs.map +0 -1
  1474. package/.output/server/chunks/build/useDeviceTwins-BqwVJaZg.mjs +0 -128
  1475. package/.output/server/chunks/build/useDeviceTwins-BqwVJaZg.mjs.map +0 -1
  1476. package/.output/server/chunks/build/useExpConfirmations-BM626N4p.mjs +0 -107
  1477. package/.output/server/chunks/build/useExpConfirmations-BM626N4p.mjs.map +0 -1
  1478. package/.output/server/chunks/build/useLocalTime-uVSM44Um.mjs +0 -55
  1479. package/.output/server/chunks/build/useLocalTime-uVSM44Um.mjs.map +0 -1
  1480. package/.output/server/chunks/build/useLogsManual-cVBZQ_Mt.mjs +0 -88
  1481. package/.output/server/chunks/build/useLogsManual-cVBZQ_Mt.mjs.map +0 -1
  1482. package/.output/server/chunks/build/useLogsQuery-D7hrJ3yn.mjs +0 -150
  1483. package/.output/server/chunks/build/useLogsQuery-D7hrJ3yn.mjs.map +0 -1
  1484. package/.output/server/chunks/build/useLogsScope-aaPQeTRm.mjs +0 -83
  1485. package/.output/server/chunks/build/useLogsScope-aaPQeTRm.mjs.map +0 -1
  1486. package/.output/server/chunks/build/useMonitorData-DIkiLr_h.mjs +0 -135
  1487. package/.output/server/chunks/build/useMonitorData-DIkiLr_h.mjs.map +0 -1
  1488. package/.output/server/chunks/build/useMonitorFormat-CyURtH8N.mjs +0 -91
  1489. package/.output/server/chunks/build/useMonitorFormat-CyURtH8N.mjs.map +0 -1
  1490. package/.output/server/chunks/build/useOperationsFeed-Ci4mZAn_.mjs +0 -195
  1491. package/.output/server/chunks/build/useOperationsFeed-Ci4mZAn_.mjs.map +0 -1
  1492. package/.output/server/chunks/build/useOpsLog-C-M6Eace.mjs +0 -149
  1493. package/.output/server/chunks/build/useOpsLog-C-M6Eace.mjs.map +0 -1
  1494. package/.output/server/chunks/build/useRecipeDispatchApprovals-BYtiqfeb.mjs +0 -156
  1495. package/.output/server/chunks/build/useRecipeDispatchApprovals-BYtiqfeb.mjs.map +0 -1
  1496. package/.output/server/chunks/build/useTeamActions-I_8QWp9w.mjs +0 -79
  1497. package/.output/server/chunks/build/useTeamActions-I_8QWp9w.mjs.map +0 -1
  1498. package/.output/server/chunks/build/useTeamAddMemberDialog-BLn4nTuy.mjs +0 -84
  1499. package/.output/server/chunks/build/useTeamAddMemberDialog-BLn4nTuy.mjs.map +0 -1
  1500. package/.output/server/chunks/build/useTeamCreateDialog-Bp5qKtpI.mjs +0 -97
  1501. package/.output/server/chunks/build/useTeamCreateDialog-Bp5qKtpI.mjs.map +0 -1
  1502. package/.output/server/chunks/build/useTeamDeployDialog-DwIaz6Cx.mjs +0 -80
  1503. package/.output/server/chunks/build/useTeamDeployDialog-DwIaz6Cx.mjs.map +0 -1
  1504. package/.output/server/chunks/build/useTeamPluginDialog-B932gZOI.mjs +0 -103
  1505. package/.output/server/chunks/build/useTeamPluginDialog-B932gZOI.mjs.map +0 -1
  1506. package/.output/server/chunks/build/useTeamsCatalog-DBwaLQBw.mjs +0 -123
  1507. package/.output/server/chunks/build/useTeamsCatalog-DBwaLQBw.mjs.map +0 -1
  1508. package/.output/server/chunks/build/useTokenCreate-Ctl0YGhL.mjs +0 -115
  1509. package/.output/server/chunks/build/useTokenCreate-Ctl0YGhL.mjs.map +0 -1
  1510. package/.output/server/chunks/build/useTokenRename-Cm3ypSfN.mjs +0 -87
  1511. package/.output/server/chunks/build/useTokenRename-Cm3ypSfN.mjs.map +0 -1
  1512. package/.output/server/chunks/build/useTokenReveal-CeoWL5Mt.mjs +0 -118
  1513. package/.output/server/chunks/build/useTokenReveal-CeoWL5Mt.mjs.map +0 -1
  1514. package/.output/server/chunks/build/useTokensList-CNIzON3u.mjs +0 -92
  1515. package/.output/server/chunks/build/useTokensList-CNIzON3u.mjs.map +0 -1
  1516. package/.output/server/chunks/build/useWorkbenchAuth-CY-bVFMu.mjs +0 -141
  1517. package/.output/server/chunks/build/useWorkbenchAuth-CY-bVFMu.mjs.map +0 -1
  1518. package/.output/server/chunks/build/useWorkbenchWorkspaces-DhZQFss9.mjs +0 -138
  1519. package/.output/server/chunks/build/useWorkbenchWorkspaces-DhZQFss9.mjs.map +0 -1
  1520. package/.output/server/chunks/build/useWorkshopApi-CaSItJVq.mjs +0 -119
  1521. package/.output/server/chunks/build/useWorkshopApi-CaSItJVq.mjs.map +0 -1
  1522. package/.output/server/chunks/build/useWorkshopWs-YQ5URrbt.mjs +0 -1659
  1523. package/.output/server/chunks/build/useWorkshopWs-YQ5URrbt.mjs.map +0 -1
  1524. package/.output/server/chunks/build/useWorkspaceAuth-Dlvj9csD.mjs.map +0 -1
  1525. package/.output/server/chunks/build/useWorkspaceChannels-CPFepxTN.mjs +0 -92
  1526. package/.output/server/chunks/build/useWorkspaceChannels-CPFepxTN.mjs.map +0 -1
  1527. package/.output/server/chunks/build/useWorkspaceShell-BCypjjjE.mjs +0 -168
  1528. package/.output/server/chunks/build/useWorkspaceShell-BCypjjjE.mjs.map +0 -1
  1529. package/.output/server/chunks/build/users-DjiVC_tS.mjs +0 -569
  1530. package/.output/server/chunks/build/users-DjiVC_tS.mjs.map +0 -1
  1531. package/.output/server/chunks/build/workshop-1gKeDASV.mjs +0 -546
  1532. package/.output/server/chunks/build/workshop-1gKeDASV.mjs.map +0 -1
  1533. package/app/.mimosa/hook-state/sess_05189059-e42d-4188-8911-4f7baabe009b.json +0 -1
  1534. package/app/.mimosa/hook-state/sess_05189059-e42d-4188-8911-4f7baabe009b.mtg0vz68-49792-75b0709555.baseline/1459e6269990a5d229b9228c8b2f62ffaa7d350068380ae8b875fee0db45cca6.source +0 -180
  1535. package/app/.mimosa/hook-state/sess_05189059-e42d-4188-8911-4f7baabe009b.mtg0vz68-49792-75b0709555.baseline/c2991e909c70c5c12b90a407c7adcf63384c51668a2b334e6e047fa675c268fe.source +0 -305
  1536. package/app/.mimosa/hook-state/sess_05189059-e42d-4188-8911-4f7baabe009b.mtg0vz68-49792-75b0709555.baseline/e09129039d1e27e3fac24becc9bdafd2d1a7c8049bff24173df007be865f0165.source +0 -264
  1537. package/app/.mimosa/hook-status/sess_05189059-e42d-4188-8911-4f7baabe009b-28ef7c75ea.json +0 -14
  1538. package/scripts/e2e-direct-rest-simulator-paper.mjs +0 -624
  1539. package/scripts/e2e-pi-simulator-paper.mjs +0 -2316
  1540. package/scripts/e2e-registered-harness-simulator-paper.mjs +0 -1926
  1541. package/scripts/e2e-simulator-optimizer-paper.mjs +0 -264
  1542. package/scripts/fixtures/omp-paper-harness.mjs +0 -163
  1543. package/server/.mimosa/hook-state/sess_869e5bfd-07f4-4b6e-a991-6221fcf6b7d2.json +0 -1
  1544. package/server/.mimosa/hook-state/sess_869e5bfd-07f4-4b6e-a991-6221fcf6b7d2.mvhn1irp-99488-e3fdc1cbfc.baseline/942d2679b87b96c612b4f2a425c3ccc5b6f3234f0cf589a8441602f866fbe277.source +0 -41
  1545. package/server/.mimosa/hook-state/sess_869e5bfd-07f4-4b6e-a991-6221fcf6b7d2.mvhn1irp-99488-e3fdc1cbfc.baseline/dd617a82339d2c61e49e28e416aabeb2fc100fb3cb1beca18d02dfb833214af6.source +0 -51
  1546. package/server/.mimosa/hook-status/sess_869e5bfd-07f4-4b6e-a991-6221fcf6b7d2-e67b6b91bf.json +0 -14
  1547. package/server/services/workshop/.mimosa/hook-state/sess_fed429fb-c8b7-4a50-bbd6-45afc580893f.json +0 -1
  1548. package/server/services/workshop/.mimosa/hook-status/sess_fed429fb-c8b7-4a50-bbd6-45afc580893f-e6b75bbfe6.json +0 -14
  1549. package/server/services/workshop/agents/omp-agent/supervision-history.ts +0 -38
  1550. package/server/services/workshop/aml/python/__pycache__/aml_eval.cpython-312.pyc +0 -0
  1551. package/server/services/workshop/aml/python/__pycache__/amlkit.cpython-312.pyc +0 -0
  1552. package/server/services/workshop/aml/python/__pycache__/train-example.cpython-312.pyc +0 -0
  1553. package/server/services/workshop/aml/python/__pycache__/train-hybrid-example.cpython-312.pyc +0 -0
  1554. package/server/services/workshop/optimization/python/.mimosa/hook-state/session_187ec97f45d4bd02369bbe94da527cf1.json +0 -1
  1555. package/server/services/workshop/optimization/python/.mimosa/hook-state/session_187ec97f45d4bd02369bbe94da527cf1.mvjqkcs6-68688-fb7131a89c.baseline/190a6772a4e43801737b4ba6072eb9d53d3099b5d8a9e6f57bc5e8592a26a6c4.source +0 -274
  1556. package/server/services/workshop/optimization/python/.mimosa/hook-status/session_187ec97f45d4bd02369bbe94da527cf1-01ed7f04fa.json +0 -14
  1557. package/server/services/workshop/optimization/python/__pycache__/problems.cpython-312.pyc +0 -0
  1558. /package/.output/public/_nuxt/{9j2J4k4w.js → 9j2J4k4w2.js} +0 -0
  1559. /package/.output/public/_nuxt/{BY3Lbz3h2.js → BY3Lbz3h.js} +0 -0
  1560. /package/.output/public/_nuxt/{Iub61dX92.js → Iub61dX9.js} +0 -0
  1561. /package/.output/public/_nuxt/{Q-JpBT032.js → Q-JpBT03.js} +0 -0
  1562. /package/.output/public/_nuxt/{dVw8IHY62.js → dVw8IHY6.js} +0 -0
  1563. /package/.output/public/_nuxt/{k9b520K-.js → k9b520K-2.js} +0 -0
@@ -1,421 +1,421 @@
1
- /**
2
- * AgentTeam 真实作业逻辑端到端(真 LLM Lead + 真 LLM worker + 真群聊)。
3
- *
4
- * 回答用户的核心问题并以真实运行取证:
5
- * P1 简单任务:Lead **自己作答**,不产生任何子任务、worker 零执行。
6
- * P2 专业任务:Lead 拆解 → 子任务全部派给 worker → 每个 worker 完工后**回 Lead 验收** →
7
- * Lead 收口并给出覆盖各子任务的验收摘要;子任务完工瞬间父任务不得是 COMPLETED。
8
- * P3 群聊请求升级:在群里 @Lead 提一个需要交付物的诉求 → Lead 用 submit_task 把它登记为
9
- * **可追踪根任务**(本轮补齐的能力),再拆解/验收,而不是只在聊天里说一句。
10
- * P4 作业进行中并行群聊:普通发言 0 次 Agent 执行、@用户只发定向通知、@Agent 才触发执行,
11
- * 且群聊不干扰作业收口、时间线顺序不乱。
12
- *
13
- * 与 mock 版契约测试(scripts/test-agentteam-workflow.ts)的分工:
14
- * 那个用确定性 mock 验证**平台侧**不变量(状态机/闸门/顺序);本脚本用真 LLM 验证
15
- * **模型侧**是否真的按契约分流(简单自己答、专业才拆、拆了要验收)。
16
- *
17
- * 运行:
18
- * node scripts/e2e-agentteam-real-triage.mjs --base http://127.0.0.1:3458
19
- * 前置:隔离实例 + omp 引擎可用;必须 NO_PROXY=127.0.0.1,localhost。
20
- */
21
- import { writeFileSync, mkdirSync } from 'node:fs'
22
-
23
- const arg = (k, d) => {
24
- const i = process.argv.indexOf(k)
25
- if (i >= 0) return process.argv[i + 1]
26
- const kv = process.argv.find(a => a.startsWith(`${k}=`))
27
- return kv ? kv.slice(k.length + 1) : d
28
- }
29
- const BASE = arg('--base', process.env.AW_E2E_BASE ?? 'http://127.0.0.1:3458')
30
- const TAG = Date.now().toString(36)
31
- const EVID = arg('--evidence', '.omc/evidence/p7-real-triage.json')
32
-
33
- let passed = 0
34
- let failures = 0
35
- let blocked = 0
36
- const notes = []
37
- const check = (name, ok, detail = '') => {
38
- console.log(` ${ok ? 'PASS' : 'FAIL'} ${name}${detail ? ` — ${detail}` : ''}`)
39
- if (ok) passed += 1
40
- else failures += 1
41
- }
42
- const block = (name, reason) => {
43
- console.log(` BLOCKED ${name} — ${reason}`)
44
- blocked += 1
45
- }
46
- /** 已定位根因的**产品缺口**(非"被验证的逻辑不成立"):单独计数,不计入 FAIL */
47
- const findings = []
48
- const finding = (name, detail) => {
49
- console.log(` FINDING ${name} — ${detail}`)
50
- findings.push(`${name}: ${detail}`)
51
- }
52
- const note = (s) => {
53
- notes.push(s)
54
- console.log(` · ${s}`)
55
- }
56
- const sleep = ms => new Promise(r => setTimeout(r, ms))
57
-
58
- async function api(method, path, { body, token, timeout = 60_000 } = {}) {
59
- const headers = { 'content-type': 'application/json' }
60
- if (token) headers.authorization = `Bearer ${token}`
61
- const res = await fetch(`${BASE}${path}`, {
62
- method,
63
- headers,
64
- body: body !== undefined ? JSON.stringify(body) : undefined,
65
- signal: AbortSignal.timeout(timeout),
66
- })
67
- const json = await res.json().catch(() => ({}))
68
- return { status: res.status, code: json.code, message: json.message, data: json.data }
69
- }
70
- const post = (p, opts) => api('POST', p, opts)
71
- const get = (p, token) => api('GET', p, { token })
72
- const patch = (p, opts) => api('PATCH', p, opts)
73
-
74
- async function registerUser(label) {
75
- const email = `rt-${label}-${TAG}@test.local`
76
- const name = `rt-${label}-${TAG}`
77
- const res = await post('/api/users/register', { body: { email, password: 'Passw0rd!123', name } })
78
- if (!res.data?.token) throw new Error(`注册 ${label} 失败:${JSON.stringify(res).slice(0, 300)}`)
79
- return { label, name, email, token: res.data.token, id: res.data.user.id }
80
- }
81
-
82
- const tasksOf = async (channelId, token) => (await get(`/api/workshop/channels/${channelId}/tasks`, token)).data ?? []
83
- const rootsOf = tasks => tasks.filter(t => !t.parentId)
84
- const childrenOf = (tasks, id) => tasks.filter(t => t.parentId === id)
85
- const artifactsTextOf = task => (task.artifacts ?? [])
86
- .flatMap(a => (a.parts ?? []).map(p => ('text' in p ? p.text : '')))
87
- .filter(Boolean)
88
-
89
- /** 通用轮询:cond 返回真值即返回它(真 LLM 慢) */
90
- async function waitFor(cond, timeoutMs = 180_000, intervalMs = 2500) {
91
- const deadline = Date.now() + timeoutMs
92
- let last = null
93
- while (Date.now() < deadline) {
94
- last = await cond()
95
- if (last) return last
96
- await sleep(intervalMs)
97
- }
98
- return last
99
- }
100
-
101
- /** 轮询到 root 终态(真 LLM 慢);采样保留父/子状态同帧快照。按 id 定位(标题可能被 Lead 改) */
102
- async function waitRootById(channelId, token, rootId, timeoutMs = 360_000) {
103
- const deadline = Date.now() + timeoutMs
104
- const samples = []
105
- while (Date.now() < deadline) {
106
- const tasks = await tasksOf(channelId, token)
107
- const root = tasks.find(t => t.id === rootId)
108
- if (root) {
109
- const kids = childrenOf(tasks, root.id)
110
- // 单次 GET 读到的是同一份引擎状态 → 这一帧内"父是否终态 / 子是否全完"是可比的
111
- samples.push({ parent: root.state, kids: kids.map(k => k.state) })
112
- if (['COMPLETED', 'FAILED', 'CANCELED'].includes(root.state)) return { root, kids, tasks, samples }
113
- }
114
- await sleep(2500)
115
- }
116
- const tasks = await tasksOf(channelId, token)
117
- const root = tasks.find(t => t.id === rootId) ?? null
118
- return { root, kids: root ? childrenOf(tasks, root.id) : [], tasks, samples, timeout: true }
119
- }
120
-
121
- /** 按标题定位(人类下发的任务标题由本脚本生成,不会被改写) */
122
- async function waitRoot(channelId, token, title, timeoutMs = 360_000) {
123
- const found = await waitFor(async () => {
124
- const tasks = await tasksOf(channelId, token)
125
- return tasks.find(t => !t.parentId && t.title === title) ?? null
126
- }, Math.min(timeoutMs, 120_000), 2500)
127
- if (!found) return { root: null, kids: [], tasks: await tasksOf(channelId, token), samples: [] }
128
- return waitRootById(channelId, token, found.id, timeoutMs)
129
- }
130
-
131
- // ============================================================================
132
- console.log(`\n━━━ AgentTeam 真实作业逻辑 E2E @ ${BASE}(真 LLM / omp)━━━`)
133
-
134
- const health = await api('GET', '/api/health')
135
- console.log(` 健康:${JSON.stringify(health.data).slice(0, 120)}`)
136
-
137
- // ── 0. preflight:omp 引擎必须可用(需先注册用户取 token)──
138
- const A = await registerUser('owner')
139
- const B = await registerUser('member')
140
- const harnesses = await get('/api/workshop/harnesses', A.token)
141
- const list = harnesses.data?.harnesses ?? harnesses.data ?? []
142
- const omp = Array.isArray(list) ? list.find(h => h.id === 'omp') : null
143
- if (!omp || omp.available !== true) {
144
- block('0.1 omp 引擎可用', `harnesses=${JSON.stringify(list).slice(0, 200)}`)
145
- console.log('\n前置不满足,终止。')
146
- process.exit(2)
147
- }
148
- check('0.1 omp 引擎可用(真 LLM)', true, `command=${omp.command} path=${omp.resolvedPath}`)
149
-
150
- // ── 0.2 用户与 Channel(真 omp lead + 2 真 omp worker)──
151
- const ch = await post('/api/workshop/channels', {
152
- body: {
153
- name: `rt-${TAG}`,
154
- description: '真实作业逻辑 E2E(omp)',
155
- leadAgent: { name: `rt-lead-${TAG}`, harness: 'omp' },
156
- },
157
- token: A.token,
158
- })
159
- const channelId = ch.data?.channelId
160
- check('0.2 owner 建 Channel(omp lead)', Boolean(channelId && ch.data?.leadAgentId), `status=${ch.status} channel=${String(channelId).slice(0, 8)}`)
161
- if (!channelId) {
162
- console.log(`建 Channel 失败:${JSON.stringify(ch).slice(0, 400)}`)
163
- process.exit(2)
164
- }
165
- const leadAgentId = ch.data.leadAgentId
166
- for (const n of [1, 2]) {
167
- const t = await post('/api/workshop/agents', { body: { name: `rt-w${n}-${TAG}`, harness: 'omp' }, token: A.token })
168
- await post(`/api/workshop/channels/${channelId}/agents`, { body: { agentId: t.data.id, role: 'worker' }, token: A.token })
169
- }
170
- // 注意:POST /api/workshop/agents 返回的是**模板 id**;任务上的 assigneeId 是 **channel 成员实例 id**。
171
- // 必须从成员名册取实例 id,否则"子任务是否派给 worker"这类断言会退化成永真。
172
- const agentsRes = await get(`/api/workshop/channels/${channelId}/agents`, A.token)
173
- const members = agentsRes.data ?? []
174
- const workerIds = members.filter(a => a.role === 'worker').map(a => a.id)
175
- const workerNames = members.filter(a => a.role === 'worker').map(a => a.name)
176
- const leadName = members.find(a => a.role === 'lead')?.name ?? leadAgentId.slice(0, 8)
177
- check('0.3 2 个 omp worker 已入队', workerIds.length === 2 && workerIds.every(id => id !== leadAgentId),
178
- `workers=${workerNames.join(',')} ids=${workerIds.map(i => i.slice(0, 6)).join(',')}`)
179
-
180
- // 开启群聊供 P4 / P3 使用
181
- const perm = await get(`/api/workshop/channels/${channelId}/chat/permissions`, A.token)
182
- await patch(`/api/workshop/channels/${channelId}`, {
183
- body: { visibility: 'public', joinPolicy: 'open', chatEnabled: 1, version: perm.data?.channel?.version },
184
- token: A.token,
185
- })
186
- await post(`/api/workshop/channels/${channelId}/members/join`, { body: {}, token: B.token })
187
- check('0.4 群聊已开启且成员 B 已加入', true)
188
-
189
- // ============================================================================
190
- console.log('\n━━━ P1 简单任务:Lead 应自己作答,不派 worker ━━━')
191
- const P1_TITLE = `把这句话翻译成英文并只返回译文:系统已就绪,请开始验收。(${TAG})`
192
- const p1sub = await post(`/api/workshop/channels/${channelId}/tasks`, {
193
- body: { title: P1_TITLE, description: '一句话翻译任务,直接给译文即可。', fromLabel: A.name },
194
- token: A.token,
195
- })
196
- check('P1.1 简单任务已下发(默认路由 Lead)', p1sub.status === 200 || p1sub.code === 0,
197
- `assignee=${String(p1sub.data?.assigneeId).slice(0, 8)} state=${p1sub.data?.state}`)
198
- const p1 = await waitRoot(channelId, A.token, P1_TITLE)
199
- const p1Artifacts = p1.root ? artifactsTextOf(p1.root) : []
200
- check('P1.2 简单任务最终 COMPLETED', p1.root?.state === 'COMPLETED',
201
- `state=${p1.root?.state ?? '(无)'} 帧=${(p1.samples ?? []).map(s => `${s.parent}[${s.kids.join(',')}]`).join(' → ')}`)
202
- check('P1.3 简单任务**零子任务**(Lead 没有把简单活推给 worker)', (p1.kids ?? []).length === 0, `children=${(p1.kids ?? []).length}`)
203
- const p1WorkerTasks = (p1.tasks ?? []).filter(t => t.parentId && workerIds.includes(t.assigneeId))
204
- check('P1.4 worker 零任务(Agent 执行没有发生)', p1WorkerTasks.length === 0, `workerTasks=${p1WorkerTasks.length}`)
205
- check('P1.5 Lead 自己给出了非空作答', p1Artifacts.join(' ').trim().length > 0,
206
- `artifacts=${(p1.root?.artifacts ?? []).map(a => a.name).join(',') || '(无)'} text=${p1Artifacts.join(' ').slice(0, 80)}`)
207
-
208
- // ============================================================================
209
- console.log('\n━━━ P2 专业任务:拆解 → 派 worker → worker 完工回 Lead 验收 ━━━')
210
- const P2_TITLE = `分别产出两份独立材料并汇总为统一建议(日志分级规范 + 轮转保留策略)(${TAG})`
211
- const P2_DESC = '本任务必须分工:需要两份**互相独立**的材料 —— (1) 日志分级规范草案(级别定义 + 每级示例);'
212
- + '(2) 日志轮转与保留策略草案(轮转周期 + 保留期 + 示例)。两份材料分别完成后,再由你(Lead)核对并汇总为一份统一建议。'
213
- + '每份材料要能在 10 行内交付。'
214
- const p2sub = await post(`/api/workshop/channels/${channelId}/tasks`, {
215
- body: { title: P2_TITLE, description: P2_DESC, fromLabel: A.name },
216
- token: A.token,
217
- })
218
- check('P2.0 专业任务已下发(缺省路由 Lead,由 Lead 自行判断是否分工)',
219
- p2sub.status === 200 || p2sub.code === 0,
220
- `assignee=${String(p2sub.data?.assigneeId).slice(0, 8)} lead=${leadAgentId.slice(0, 8)}`)
221
-
222
- // 作业进行中并行群聊(P4):普通发言 / @用户 / @Agent
223
- console.log('\n — 作业进行中的群聊并行(P4)—')
224
- await sleep(4000)
225
- const plain = await post(`/api/workshop/channels/${channelId}/chat/messages`, {
226
- body: { text: '这个作业大概要多久?(普通发言,没有 @ 任何人)', clientMessageId: `p4-plain-${TAG}` },
227
- token: B.token,
228
- })
229
- check('P4.1 作业中的普通发言 → 0 次 Agent 执行', (plain.data?.deliveries ?? []).length === 0, `deliveries=${(plain.data?.deliveries ?? []).length}`)
230
- const atUser = await post(`/api/workshop/channels/${channelId}/chat/messages`, {
231
- body: { text: `@${A.name} 你盯一下进度`, clientMessageId: `p4-user-${TAG}` },
232
- token: B.token,
233
- })
234
- check('P4.2 @用户 → 0 次 Agent 执行', (atUser.data?.deliveries ?? []).length === 0)
235
- check('P4.3 @用户 → 解析为定向 user mention', (atUser.data?.mentions ?? []).some(m => m.type === 'user' && m.id === A.id),
236
- JSON.stringify(atUser.data?.mentions))
237
- const atAgent = await post(`/api/workshop/channels/${channelId}/chat/messages`, {
238
- body: { text: `@${workerNames[0]} 你手头的子任务现在什么状态?一句话就行`, clientMessageId: `p4-agent-${TAG}` },
239
- token: B.token,
240
- })
241
- check('P4.4 @Agent → 产生定向投递(才会触发 Agent 执行)', (atAgent.data?.deliveries ?? []).length === 1,
242
- `deliveries=${(atAgent.data?.deliveries ?? []).length} mentions=${JSON.stringify((atAgent.data?.mentions ?? []).map(m => m.type))}`)
243
-
244
- const p2 = await waitRoot(channelId, A.token, P2_TITLE, 900_000)
245
- const p2Artifacts = p2.root ? artifactsTextOf(p2.root) : []
246
- check('P2.1 专业任务最终收口 COMPLETED(群聊并行未干扰)', p2.root?.state === 'COMPLETED',
247
- `state=${p2.root?.state ?? '(无)'} samples=${(p2.samples ?? []).join(' → ')}`)
248
- check('P2.2 Lead 把专业任务拆成了多个子任务', (p2.kids ?? []).length >= 2, `children=${(p2.kids ?? []).length}`)
249
- check('P2.3 子任务全部派给 worker(不是留在 Lead 名下)',
250
- (p2.kids ?? []).length > 0 && (p2.kids ?? []).every(k => workerIds.includes(k.assigneeId)),
251
- (p2.kids ?? []).map(k => k.assigneeId.slice(0, 6)).join(','))
252
- check('P2.4 每个子任务都带验收标准(Lead 自己定义验收)',
253
- (p2.kids ?? []).length > 0 && (p2.kids ?? []).every(k => /验收|标准|accept|criteria/i.test(k.description ?? '')),
254
- `with=${(p2.kids ?? []).filter(k => /验收|标准|accept|criteria/i.test(k.description ?? '')).length}/${(p2.kids ?? []).length}`)
255
- check('P2.5 子任务全部 COMPLETED(worker 交付了成果)',
256
- (p2.kids ?? []).length > 0 && (p2.kids ?? []).every(k => k.state === 'COMPLETED'),
257
- (p2.kids ?? []).map(k => k.state).join(','))
258
- check('P2.6 任何一帧都不存在"父已完成但子未全完"(完工≠验收,父任务不自作主张收口)',
259
- (p2.samples ?? []).every(s => !(s.parent === 'COMPLETED' && s.kids.some(k => k !== 'COMPLETED'))),
260
- `帧=${(p2.samples ?? []).map(s => `${s.parent}[${s.kids.join(',')}]`).join(' → ')}`)
261
- // 观察项(不作硬断言):是否采样到"子任务全完、父任务尚未收口"的验收等待窗口。
262
- // 真 LLM 收口很快(轮询粒度 2.5s 可能错过),**确定性证明**见 mock 契约测试 B6(事件流同帧采样)。
263
- {
264
- const i = (p2.samples ?? []).findIndex(s => s.kids.length > 0 && s.kids.every(k => k === 'COMPLETED') && s.parent !== 'COMPLETED')
265
- note(i >= 0
266
- ? `采样到"子任务全完但父任务未完成"的中间帧(parent=${p2.samples[i].parent})— 验收等待窗口真实存在`
267
- : '未采样到中间帧(真 LLM 收口快于 2.5s 轮询;确定性证明见 mock 契约测试 B6)')
268
- }
269
- // 父任务收口产物:真实 LLM 常把验收/汇总写成名为 deliverable 的产物(而非特定 artifact 名),
270
- // 因此按"非 input 且非空"识别,**不能**按名字白名单(否则会把正确行为判成失败)。
271
- const p2ParentArt = (p2.root?.artifacts ?? []).filter(a => a.name !== 'input'
272
- && (a.parts ?? []).some(pa => 'text' in pa && pa.text.trim().length > 0))
273
- const p2ParentText = p2ParentArt.flatMap(a => (a.parts ?? []).map(pa => ('text' in pa ? pa.text : ''))).join(' ')
274
- check('P2.7 父任务带 Lead 自己的验收/汇总产物', p2ParentArt.length > 0,
275
- `artifacts=${(p2.root?.artifacts ?? []).map(a => a.name).join(',')}`)
276
- // 覆盖度用**二字组重合率**判定,而不是"标题前 4 字必须原样出现":
277
- // 真 LLM 的汇总稿会说"【二、轮转与保留(源自材料B…】",不一定复述子任务标题的措辞。
278
- const bigramsOf = (s) => {
279
- const t = String(s).replace(/[\s::,,。.、\-—_()()【】[\]]/g, '')
280
- const out = new Set()
281
- for (let i = 0; i + 2 <= t.length; i++) out.add(t.slice(i, i + 2))
282
- return [...out]
283
- }
284
- const coverage = (p2.kids ?? []).map((k) => {
285
- const grams = bigramsOf(k.title)
286
- const hit = grams.filter(g => p2ParentText.includes(g)).length
287
- return { title: String(k.title).slice(0, 22), ratio: grams.length ? hit / grams.length : 0 }
288
- })
289
- check('P2.8 收口产物是实质内容且逐项覆盖各子任务(不是空壳/不是只交一份)',
290
- p2ParentText.trim().length > 200 && coverage.every(c => c.ratio >= 0.4),
291
- `长度=${p2ParentText.trim().length} 覆盖=${coverage.map(c => `${c.title}:${(c.ratio * 100).toFixed(0)}%`).join(' ')}`)
292
-
293
- // ── 群聊时间线顺序 + @Agent 是否真的回话 ──
294
- // GET /chat/messages 是**倒序**(新→旧,游标分页 beforeId);比较前先翻回时间顺序
295
- const hist = await get(`/api/workshop/channels/${channelId}/chat/messages`, B.token)
296
- const msgs = [...(hist.data?.messages ?? [])].reverse()
297
- const texts = msgs.map(m => m.text)
298
- const iPlain = texts.findIndex(t => t.includes('普通发言'))
299
- const iUser = texts.findIndex(t => t.includes('你盯一下进度'))
300
- const iAgent = texts.findIndex(t => t.includes('子任务现在什么状态'))
301
- check('P4.5 群聊时间线按提交顺序排列(不混乱)', iPlain >= 0 && iUser > iPlain && iAgent > iUser,
302
- `plain@${iPlain} user@${iUser} agent@${iAgent} :: ${texts.map(t => t.slice(0, 8)).join(' > ')}`)
303
- const agentReplies = msgs.filter(m => m.senderType === 'agent')
304
- check('P4.6 @Agent 后群聊里出现了 Agent 的回复', agentReplies.length > 0, `agentMessages=${agentReplies.length}`)
305
-
306
- // ============================================================================
307
- console.log('\n━━━ P3 群聊请求 → Lead 升级为可追踪根任务(submit_task)━━━')
308
-
309
- // P3.0 探针:先隔离"Lead 能不能在群里回话"这件事 —— 一句不需要分工的随口问答。
310
- // 若这一条也没有 lead 消息,说明缺口在"Lead 的群聊回复通路"本身,而不是"升级为任务后没回话"。
311
- const probeAsk = `一句话回答:HTTP 状态码 404 表示什么?(${TAG})`
312
- await post(`/api/workshop/channels/${channelId}/chat/messages`, {
313
- body: { text: `@${leadName} ${probeAsk}`, clientMessageId: `p3-probe-${TAG}` },
314
- token: B.token,
315
- })
316
- const probeReply = await waitFor(
317
- async () => {
318
- const h = await get(`/api/workshop/channels/${channelId}/chat/messages`, B.token)
319
- return (h.data?.messages ?? []).find(m => m.senderType === 'agent' && m.senderId === leadAgentId) ?? null
320
- }, 300_000, 4000)
321
- if (probeReply) {
322
- check('P3.0 Lead 能对群里的一句随口提问**直接回话**(最简单的群聊闭环)',
323
- true, `text=${String(probeReply.text).slice(0, 60)}`)
324
- }
325
- else {
326
- finding('P3.0 Lead 对群里随口提问的直接回话',
327
- '3 分钟内 Lead 未回话,该 chat_delivery 仍停在 delivered。注意这条通路本身是**可用**的'
328
- + '(另一轮实测:delivery 变 consumed 且群里出现 Lead 的回复),因此更像是"Lead 正忙于 supervise 回合 ⇒ 群聊回合排队/超时"'
329
- + '(实测出现过 supervise 回合 150s 超时被 abort),而不是结构性缺失;但排队过久会让提问者长时间得不到答复,值得关注')
330
- }
331
-
332
- const P3_ASK = `请给出这个项目的日志清理作业方案:要包含执行步骤与回滚步骤,做完把结论发到群里。(${TAG})`
333
- const before = await tasksOf(channelId, A.token)
334
- const beforeRoots = new Set(rootsOf(before).map(t => t.id))
335
- // 记下提问前已有的 Lead 群聊消息 id:后面的"结论回群"必须是一条**新**消息,
336
- // 否则会被 P3.0 那条随口问答的回复冒名顶替(假通过)。
337
- const leadMsgIdsBefore = new Set(
338
- [...((await get(`/api/workshop/channels/${channelId}/chat/messages`, B.token)).data?.messages ?? [])]
339
- .filter(m => m.senderType === 'agent' && m.senderId === leadAgentId)
340
- .map(m => m.id),
341
- )
342
- await post(`/api/workshop/channels/${channelId}/chat/messages`, {
343
- body: { text: `@${leadName} ${P3_ASK}`, clientMessageId: `p3-ask-${TAG}` },
344
- token: B.token,
345
- })
346
- // Lead 可能先回群聊、再登记任务;轮询等新根任务出现。
347
- // 窗口给足:Lead 是**单线程串行**的,忙在 supervise 回合时群聊回合会排队(实测出现过 supervise 150s 超时),
348
- // 窗口太紧会把"排队慢"误报成"没升级"。
349
- let newRoot = null
350
- const p3Deadline = Date.now() + 600_000
351
- while (Date.now() < p3Deadline && !newRoot) {
352
- const tasks = await tasksOf(channelId, A.token)
353
- newRoot = rootsOf(tasks).find(t => !beforeRoots.has(t.id)) ?? null
354
- if (!newRoot) await sleep(2500)
355
- }
356
- check('P3.1 Lead 把群聊诉求登记为**可追踪根任务**(submit_task 生效)', Boolean(newRoot),
357
- newRoot ? `root=${newRoot.id.slice(0, 8)} state=${newRoot.state} title=${String(newRoot.title).slice(0, 40)}` : '5min 内未出现新根任务')
358
- if (newRoot) {
359
- check('P3.2 新根任务归属 Lead(creator/assignee 可追溯)',
360
- newRoot.assigneeId === leadAgentId, `assignee=${String(newRoot.assigneeId).slice(0, 8)} lead=${leadAgentId.slice(0, 8)}`)
361
- const p3 = await waitRootById(channelId, A.token, newRoot.id, 900_000)
362
- check('P3.3 该根任务最终收口 COMPLETED', p3.root?.state === 'COMPLETED', `state=${p3.root?.state}`)
363
- const p3kids = p3.kids ?? []
364
- const p3Text = p3.root ? artifactsTextOf(p3.root).join(' ') : ''
365
- // 逻辑要求是"简单自己答、专业才拆",不是"一律拆":所以这里断言的是**闭环成立**——
366
- // 若拆了则子任务必须全在 worker 名下且已完工;无论如何都必须有实质交付物。
367
- check('P3.4 群聊来源的作业被真正做完(自己作答或拆给 worker,均有实质交付物)',
368
- (p3kids.length === 0 || p3kids.every(k => k.state === 'COMPLETED' && workerIds.includes(k.assigneeId)))
369
- && p3Text.trim().length > 60,
370
- `children=${p3kids.length} 交付长度=${p3Text.trim().length} 产物=${(p3.root?.artifacts ?? []).map(a => a.name).join(',')}`)
371
- // 群聊回复是**异步**的 ⇒ 轮询等待;但必须是一条**新**消息(排除 P3.0 的回复)。
372
- const leadMsg = await waitFor(async () => {
373
- const h = await get(`/api/workshop/channels/${channelId}/chat/messages`, B.token)
374
- return [...(h.data?.messages ?? [])]
375
- .find(m => m.senderType === 'agent' && m.senderId === leadAgentId && !leadMsgIdsBefore.has(m.id)) ?? null
376
- }, 240_000, 4000)
377
- if (leadMsg) {
378
- check('P3.5 Lead 把这次作业的结论回了群(新消息,不是 P3.0 那条)', true,
379
- `text=${String(leadMsg.text).slice(0, 60)}`)
380
- }
381
- else {
382
- finding('P3.5 升级为任务后把结论回给群里的提问者',
383
- `作业已收口(交付物 ${p3Text.trim().length} 字,子任务 ${p3kids.length} 个),但群里没有出现针对本次提问的 Lead 新消息 ——`
384
- + '与"随口问答"那条通路形成对照(那条 chat_delivery 被消费且 Lead 回话成功):'
385
- + '群聊请求一旦经 submit_task 升级为任务、改由 SchedulerLoop.supervise 驱动,该 chat_delivery 就停在 delivered 永不被消费,'
386
- + '平台唯一的群聊回复出口(agent-runtime.processMessage 内的 platformReply)走不到 ⇒ 结论只落在任务 deliverable 里,提问者在群里看不到。'
387
- + '建议:submit_task 记录来源 chat message id,该根任务 complete 时把验收结论镜像进群聊并把对应 chat_deliveries 收敛为 consumed。')
388
- }
389
- }
390
-
391
- // ============================================================================
392
- const evidence = {
393
- base: BASE,
394
- channelId,
395
- leadAgentId,
396
- workerIds,
397
- phases: {
398
- p1: { title: P1_TITLE, root: p1.root, kids: p1.kids, samples: p1.samples, artifacts: p1Artifacts },
399
- p2: { title: P2_TITLE, root: p2.root, kids: p2.kids, samples: p2.samples, artifacts: p2Artifacts },
400
- p3: { ask: P3_ASK, root: newRoot },
401
- chat: texts,
402
- },
403
- notes,
404
- findings,
405
- }
406
- try {
407
- mkdirSync('.omc/evidence', { recursive: true })
408
- writeFileSync(EVID, JSON.stringify(evidence, null, 1), 'utf8')
409
- console.log(`\n证据已写入 ${EVID}`)
410
- }
411
- catch (e) {
412
- console.log(`证据写入失败:${e.message}`)
413
- }
414
-
415
- console.log(`\n${'='.repeat(64)}`)
416
- console.log(`真实作业逻辑 E2E: PASS=${passed} FAIL=${failures} FINDING=${findings.length} BLOCKED=${blocked}`)
417
- if (failures > 0) console.log('关注项(被验证的逻辑不成立):见上方 FAIL 行')
418
- for (const f of findings) console.log(` FINDING ${f}`)
419
- console.log('='.repeat(64))
420
- // 退出码只反映"被验证的逻辑不成立"(FAIL);已定位根因的产品缺口单列 FINDING
421
- process.exit(failures > 0 ? 1 : 0)
1
+ /**
2
+ * AgentTeam 真实作业逻辑端到端(真 LLM Lead + 真 LLM worker + 真群聊)。
3
+ *
4
+ * 回答用户的核心问题并以真实运行取证:
5
+ * P1 简单任务:Lead **自己作答**,不产生任何子任务、worker 零执行。
6
+ * P2 专业任务:Lead 拆解 → 子任务全部派给 worker → 每个 worker 完工后**回 Lead 验收** →
7
+ * Lead 收口并给出覆盖各子任务的验收摘要;子任务完工瞬间父任务不得是 COMPLETED。
8
+ * P3 群聊请求升级:在群里 @Lead 提一个需要交付物的诉求 → Lead 用 submit_task 把它登记为
9
+ * **可追踪根任务**(本轮补齐的能力),再拆解/验收,而不是只在聊天里说一句。
10
+ * P4 作业进行中并行群聊:普通发言 0 次 Agent 执行、@用户只发定向通知、@Agent 才触发执行,
11
+ * 且群聊不干扰作业收口、时间线顺序不乱。
12
+ *
13
+ * 与 mock 版契约测试(scripts/test-agentteam-workflow.ts)的分工:
14
+ * 那个用确定性 mock 验证**平台侧**不变量(状态机/闸门/顺序);本脚本用真 LLM 验证
15
+ * **模型侧**是否真的按契约分流(简单自己答、专业才拆、拆了要验收)。
16
+ *
17
+ * 运行:
18
+ * node scripts/e2e-agentteam-real-triage.mjs --base http://127.0.0.1:3458
19
+ * 前置:隔离实例 + omp 引擎可用;必须 NO_PROXY=127.0.0.1,localhost。
20
+ */
21
+ import { writeFileSync, mkdirSync } from 'node:fs'
22
+
23
+ const arg = (k, d) => {
24
+ const i = process.argv.indexOf(k)
25
+ if (i >= 0) return process.argv[i + 1]
26
+ const kv = process.argv.find(a => a.startsWith(`${k}=`))
27
+ return kv ? kv.slice(k.length + 1) : d
28
+ }
29
+ const BASE = arg('--base', process.env.AW_E2E_BASE ?? 'http://127.0.0.1:3458')
30
+ const TAG = Date.now().toString(36)
31
+ const EVID = arg('--evidence', '.omc/evidence/p7-real-triage.json')
32
+
33
+ let passed = 0
34
+ let failures = 0
35
+ let blocked = 0
36
+ const notes = []
37
+ const check = (name, ok, detail = '') => {
38
+ console.log(` ${ok ? 'PASS' : 'FAIL'} ${name}${detail ? ` — ${detail}` : ''}`)
39
+ if (ok) passed += 1
40
+ else failures += 1
41
+ }
42
+ const block = (name, reason) => {
43
+ console.log(` BLOCKED ${name} — ${reason}`)
44
+ blocked += 1
45
+ }
46
+ /** 已定位根因的**产品缺口**(非"被验证的逻辑不成立"):单独计数,不计入 FAIL */
47
+ const findings = []
48
+ const finding = (name, detail) => {
49
+ console.log(` FINDING ${name} — ${detail}`)
50
+ findings.push(`${name}: ${detail}`)
51
+ }
52
+ const note = (s) => {
53
+ notes.push(s)
54
+ console.log(` · ${s}`)
55
+ }
56
+ const sleep = ms => new Promise(r => setTimeout(r, ms))
57
+
58
+ async function api(method, path, { body, token, timeout = 60_000 } = {}) {
59
+ const headers = { 'content-type': 'application/json' }
60
+ if (token) headers.authorization = `Bearer ${token}`
61
+ const res = await fetch(`${BASE}${path}`, {
62
+ method,
63
+ headers,
64
+ body: body !== undefined ? JSON.stringify(body) : undefined,
65
+ signal: AbortSignal.timeout(timeout),
66
+ })
67
+ const json = await res.json().catch(() => ({}))
68
+ return { status: res.status, code: json.code, message: json.message, data: json.data }
69
+ }
70
+ const post = (p, opts) => api('POST', p, opts)
71
+ const get = (p, token) => api('GET', p, { token })
72
+ const patch = (p, opts) => api('PATCH', p, opts)
73
+
74
+ async function registerUser(label) {
75
+ const email = `rt-${label}-${TAG}@test.local`
76
+ const name = `rt-${label}-${TAG}`
77
+ const res = await post('/api/users/register', { body: { email, password: 'Passw0rd!123', name } })
78
+ if (!res.data?.token) throw new Error(`注册 ${label} 失败:${JSON.stringify(res).slice(0, 300)}`)
79
+ return { label, name, email, token: res.data.token, id: res.data.user.id }
80
+ }
81
+
82
+ const tasksOf = async (channelId, token) => (await get(`/api/workshop/channels/${channelId}/tasks`, token)).data ?? []
83
+ const rootsOf = tasks => tasks.filter(t => !t.parentId)
84
+ const childrenOf = (tasks, id) => tasks.filter(t => t.parentId === id)
85
+ const artifactsTextOf = task => (task.artifacts ?? [])
86
+ .flatMap(a => (a.parts ?? []).map(p => ('text' in p ? p.text : '')))
87
+ .filter(Boolean)
88
+
89
+ /** 通用轮询:cond 返回真值即返回它(真 LLM 慢) */
90
+ async function waitFor(cond, timeoutMs = 180_000, intervalMs = 2500) {
91
+ const deadline = Date.now() + timeoutMs
92
+ let last = null
93
+ while (Date.now() < deadline) {
94
+ last = await cond()
95
+ if (last) return last
96
+ await sleep(intervalMs)
97
+ }
98
+ return last
99
+ }
100
+
101
+ /** 轮询到 root 终态(真 LLM 慢);采样保留父/子状态同帧快照。按 id 定位(标题可能被 Lead 改) */
102
+ async function waitRootById(channelId, token, rootId, timeoutMs = 360_000) {
103
+ const deadline = Date.now() + timeoutMs
104
+ const samples = []
105
+ while (Date.now() < deadline) {
106
+ const tasks = await tasksOf(channelId, token)
107
+ const root = tasks.find(t => t.id === rootId)
108
+ if (root) {
109
+ const kids = childrenOf(tasks, root.id)
110
+ // 单次 GET 读到的是同一份引擎状态 → 这一帧内"父是否终态 / 子是否全完"是可比的
111
+ samples.push({ parent: root.state, kids: kids.map(k => k.state) })
112
+ if (['COMPLETED', 'FAILED', 'CANCELED'].includes(root.state)) return { root, kids, tasks, samples }
113
+ }
114
+ await sleep(2500)
115
+ }
116
+ const tasks = await tasksOf(channelId, token)
117
+ const root = tasks.find(t => t.id === rootId) ?? null
118
+ return { root, kids: root ? childrenOf(tasks, root.id) : [], tasks, samples, timeout: true }
119
+ }
120
+
121
+ /** 按标题定位(人类下发的任务标题由本脚本生成,不会被改写) */
122
+ async function waitRoot(channelId, token, title, timeoutMs = 360_000) {
123
+ const found = await waitFor(async () => {
124
+ const tasks = await tasksOf(channelId, token)
125
+ return tasks.find(t => !t.parentId && t.title === title) ?? null
126
+ }, Math.min(timeoutMs, 120_000), 2500)
127
+ if (!found) return { root: null, kids: [], tasks: await tasksOf(channelId, token), samples: [] }
128
+ return waitRootById(channelId, token, found.id, timeoutMs)
129
+ }
130
+
131
+ // ============================================================================
132
+ console.log(`\n━━━ AgentTeam 真实作业逻辑 E2E @ ${BASE}(真 LLM / omp)━━━`)
133
+
134
+ const health = await api('GET', '/api/health')
135
+ console.log(` 健康:${JSON.stringify(health.data).slice(0, 120)}`)
136
+
137
+ // ── 0. preflight:omp 引擎必须可用(需先注册用户取 token)──
138
+ const A = await registerUser('owner')
139
+ const B = await registerUser('member')
140
+ const harnesses = await get('/api/workshop/harnesses', A.token)
141
+ const list = harnesses.data?.harnesses ?? harnesses.data ?? []
142
+ const omp = Array.isArray(list) ? list.find(h => h.id === 'omp') : null
143
+ if (!omp || omp.available !== true) {
144
+ block('0.1 omp 引擎可用', `harnesses=${JSON.stringify(list).slice(0, 200)}`)
145
+ console.log('\n前置不满足,终止。')
146
+ process.exit(2)
147
+ }
148
+ check('0.1 omp 引擎可用(真 LLM)', true, `command=${omp.command} path=${omp.resolvedPath}`)
149
+
150
+ // ── 0.2 用户与 Channel(真 omp lead + 2 真 omp worker)──
151
+ const ch = await post('/api/workshop/channels', {
152
+ body: {
153
+ name: `rt-${TAG}`,
154
+ description: '真实作业逻辑 E2E(omp)',
155
+ leadAgent: { name: `rt-lead-${TAG}`, harness: 'omp' },
156
+ },
157
+ token: A.token,
158
+ })
159
+ const channelId = ch.data?.channelId
160
+ check('0.2 owner 建 Channel(omp lead)', Boolean(channelId && ch.data?.leadAgentId), `status=${ch.status} channel=${String(channelId).slice(0, 8)}`)
161
+ if (!channelId) {
162
+ console.log(`建 Channel 失败:${JSON.stringify(ch).slice(0, 400)}`)
163
+ process.exit(2)
164
+ }
165
+ const leadAgentId = ch.data.leadAgentId
166
+ for (const n of [1, 2]) {
167
+ const t = await post('/api/workshop/agents', { body: { name: `rt-w${n}-${TAG}`, harness: 'omp' }, token: A.token })
168
+ await post(`/api/workshop/channels/${channelId}/agents`, { body: { agentId: t.data.id, role: 'worker' }, token: A.token })
169
+ }
170
+ // 注意:POST /api/workshop/agents 返回的是**模板 id**;任务上的 assigneeId 是 **channel 成员实例 id**。
171
+ // 必须从成员名册取实例 id,否则"子任务是否派给 worker"这类断言会退化成永真。
172
+ const agentsRes = await get(`/api/workshop/channels/${channelId}/agents`, A.token)
173
+ const members = agentsRes.data ?? []
174
+ const workerIds = members.filter(a => a.role === 'worker').map(a => a.id)
175
+ const workerNames = members.filter(a => a.role === 'worker').map(a => a.name)
176
+ const leadName = members.find(a => a.role === 'lead')?.name ?? leadAgentId.slice(0, 8)
177
+ check('0.3 2 个 omp worker 已入队', workerIds.length === 2 && workerIds.every(id => id !== leadAgentId),
178
+ `workers=${workerNames.join(',')} ids=${workerIds.map(i => i.slice(0, 6)).join(',')}`)
179
+
180
+ // 开启群聊供 P4 / P3 使用
181
+ const perm = await get(`/api/workshop/channels/${channelId}/chat/permissions`, A.token)
182
+ await patch(`/api/workshop/channels/${channelId}`, {
183
+ body: { visibility: 'public', joinPolicy: 'open', chatEnabled: 1, version: perm.data?.channel?.version },
184
+ token: A.token,
185
+ })
186
+ await post(`/api/workshop/channels/${channelId}/members/join`, { body: {}, token: B.token })
187
+ check('0.4 群聊已开启且成员 B 已加入', true)
188
+
189
+ // ============================================================================
190
+ console.log('\n━━━ P1 简单任务:Lead 应自己作答,不派 worker ━━━')
191
+ const P1_TITLE = `把这句话翻译成英文并只返回译文:系统已就绪,请开始验收。(${TAG})`
192
+ const p1sub = await post(`/api/workshop/channels/${channelId}/tasks`, {
193
+ body: { title: P1_TITLE, description: '一句话翻译任务,直接给译文即可。', fromLabel: A.name },
194
+ token: A.token,
195
+ })
196
+ check('P1.1 简单任务已下发(默认路由 Lead)', p1sub.status === 200 || p1sub.code === 0,
197
+ `assignee=${String(p1sub.data?.assigneeId).slice(0, 8)} state=${p1sub.data?.state}`)
198
+ const p1 = await waitRoot(channelId, A.token, P1_TITLE)
199
+ const p1Artifacts = p1.root ? artifactsTextOf(p1.root) : []
200
+ check('P1.2 简单任务最终 COMPLETED', p1.root?.state === 'COMPLETED',
201
+ `state=${p1.root?.state ?? '(无)'} 帧=${(p1.samples ?? []).map(s => `${s.parent}[${s.kids.join(',')}]`).join(' → ')}`)
202
+ check('P1.3 简单任务**零子任务**(Lead 没有把简单活推给 worker)', (p1.kids ?? []).length === 0, `children=${(p1.kids ?? []).length}`)
203
+ const p1WorkerTasks = (p1.tasks ?? []).filter(t => t.parentId && workerIds.includes(t.assigneeId))
204
+ check('P1.4 worker 零任务(Agent 执行没有发生)', p1WorkerTasks.length === 0, `workerTasks=${p1WorkerTasks.length}`)
205
+ check('P1.5 Lead 自己给出了非空作答', p1Artifacts.join(' ').trim().length > 0,
206
+ `artifacts=${(p1.root?.artifacts ?? []).map(a => a.name).join(',') || '(无)'} text=${p1Artifacts.join(' ').slice(0, 80)}`)
207
+
208
+ // ============================================================================
209
+ console.log('\n━━━ P2 专业任务:拆解 → 派 worker → worker 完工回 Lead 验收 ━━━')
210
+ const P2_TITLE = `分别产出两份独立材料并汇总为统一建议(日志分级规范 + 轮转保留策略)(${TAG})`
211
+ const P2_DESC = '本任务必须分工:需要两份**互相独立**的材料 —— (1) 日志分级规范草案(级别定义 + 每级示例);'
212
+ + '(2) 日志轮转与保留策略草案(轮转周期 + 保留期 + 示例)。两份材料分别完成后,再由你(Lead)核对并汇总为一份统一建议。'
213
+ + '每份材料要能在 10 行内交付。'
214
+ const p2sub = await post(`/api/workshop/channels/${channelId}/tasks`, {
215
+ body: { title: P2_TITLE, description: P2_DESC, fromLabel: A.name },
216
+ token: A.token,
217
+ })
218
+ check('P2.0 专业任务已下发(缺省路由 Lead,由 Lead 自行判断是否分工)',
219
+ p2sub.status === 200 || p2sub.code === 0,
220
+ `assignee=${String(p2sub.data?.assigneeId).slice(0, 8)} lead=${leadAgentId.slice(0, 8)}`)
221
+
222
+ // 作业进行中并行群聊(P4):普通发言 / @用户 / @Agent
223
+ console.log('\n — 作业进行中的群聊并行(P4)—')
224
+ await sleep(4000)
225
+ const plain = await post(`/api/workshop/channels/${channelId}/chat/messages`, {
226
+ body: { text: '这个作业大概要多久?(普通发言,没有 @ 任何人)', clientMessageId: `p4-plain-${TAG}` },
227
+ token: B.token,
228
+ })
229
+ check('P4.1 作业中的普通发言 → 0 次 Agent 执行', (plain.data?.deliveries ?? []).length === 0, `deliveries=${(plain.data?.deliveries ?? []).length}`)
230
+ const atUser = await post(`/api/workshop/channels/${channelId}/chat/messages`, {
231
+ body: { text: `@${A.name} 你盯一下进度`, clientMessageId: `p4-user-${TAG}` },
232
+ token: B.token,
233
+ })
234
+ check('P4.2 @用户 → 0 次 Agent 执行', (atUser.data?.deliveries ?? []).length === 0)
235
+ check('P4.3 @用户 → 解析为定向 user mention', (atUser.data?.mentions ?? []).some(m => m.type === 'user' && m.id === A.id),
236
+ JSON.stringify(atUser.data?.mentions))
237
+ const atAgent = await post(`/api/workshop/channels/${channelId}/chat/messages`, {
238
+ body: { text: `@${workerNames[0]} 你手头的子任务现在什么状态?一句话就行`, clientMessageId: `p4-agent-${TAG}` },
239
+ token: B.token,
240
+ })
241
+ check('P4.4 @Agent → 产生定向投递(才会触发 Agent 执行)', (atAgent.data?.deliveries ?? []).length === 1,
242
+ `deliveries=${(atAgent.data?.deliveries ?? []).length} mentions=${JSON.stringify((atAgent.data?.mentions ?? []).map(m => m.type))}`)
243
+
244
+ const p2 = await waitRoot(channelId, A.token, P2_TITLE, 900_000)
245
+ const p2Artifacts = p2.root ? artifactsTextOf(p2.root) : []
246
+ check('P2.1 专业任务最终收口 COMPLETED(群聊并行未干扰)', p2.root?.state === 'COMPLETED',
247
+ `state=${p2.root?.state ?? '(无)'} samples=${(p2.samples ?? []).join(' → ')}`)
248
+ check('P2.2 Lead 把专业任务拆成了多个子任务', (p2.kids ?? []).length >= 2, `children=${(p2.kids ?? []).length}`)
249
+ check('P2.3 子任务全部派给 worker(不是留在 Lead 名下)',
250
+ (p2.kids ?? []).length > 0 && (p2.kids ?? []).every(k => workerIds.includes(k.assigneeId)),
251
+ (p2.kids ?? []).map(k => k.assigneeId.slice(0, 6)).join(','))
252
+ check('P2.4 每个子任务都带验收标准(Lead 自己定义验收)',
253
+ (p2.kids ?? []).length > 0 && (p2.kids ?? []).every(k => /验收|标准|accept|criteria/i.test(k.description ?? '')),
254
+ `with=${(p2.kids ?? []).filter(k => /验收|标准|accept|criteria/i.test(k.description ?? '')).length}/${(p2.kids ?? []).length}`)
255
+ check('P2.5 子任务全部 COMPLETED(worker 交付了成果)',
256
+ (p2.kids ?? []).length > 0 && (p2.kids ?? []).every(k => k.state === 'COMPLETED'),
257
+ (p2.kids ?? []).map(k => k.state).join(','))
258
+ check('P2.6 任何一帧都不存在"父已完成但子未全完"(完工≠验收,父任务不自作主张收口)',
259
+ (p2.samples ?? []).every(s => !(s.parent === 'COMPLETED' && s.kids.some(k => k !== 'COMPLETED'))),
260
+ `帧=${(p2.samples ?? []).map(s => `${s.parent}[${s.kids.join(',')}]`).join(' → ')}`)
261
+ // 观察项(不作硬断言):是否采样到"子任务全完、父任务尚未收口"的验收等待窗口。
262
+ // 真 LLM 收口很快(轮询粒度 2.5s 可能错过),**确定性证明**见 mock 契约测试 B6(事件流同帧采样)。
263
+ {
264
+ const i = (p2.samples ?? []).findIndex(s => s.kids.length > 0 && s.kids.every(k => k === 'COMPLETED') && s.parent !== 'COMPLETED')
265
+ note(i >= 0
266
+ ? `采样到"子任务全完但父任务未完成"的中间帧(parent=${p2.samples[i].parent})— 验收等待窗口真实存在`
267
+ : '未采样到中间帧(真 LLM 收口快于 2.5s 轮询;确定性证明见 mock 契约测试 B6)')
268
+ }
269
+ // 父任务收口产物:真实 LLM 常把验收/汇总写成名为 deliverable 的产物(而非特定 artifact 名),
270
+ // 因此按"非 input 且非空"识别,**不能**按名字白名单(否则会把正确行为判成失败)。
271
+ const p2ParentArt = (p2.root?.artifacts ?? []).filter(a => a.name !== 'input'
272
+ && (a.parts ?? []).some(pa => 'text' in pa && pa.text.trim().length > 0))
273
+ const p2ParentText = p2ParentArt.flatMap(a => (a.parts ?? []).map(pa => ('text' in pa ? pa.text : ''))).join(' ')
274
+ check('P2.7 父任务带 Lead 自己的验收/汇总产物', p2ParentArt.length > 0,
275
+ `artifacts=${(p2.root?.artifacts ?? []).map(a => a.name).join(',')}`)
276
+ // 覆盖度用**二字组重合率**判定,而不是"标题前 4 字必须原样出现":
277
+ // 真 LLM 的汇总稿会说"【二、轮转与保留(源自材料B…】",不一定复述子任务标题的措辞。
278
+ const bigramsOf = (s) => {
279
+ const t = String(s).replace(/[\s::,,。.、\-—_()()【】[\]]/g, '')
280
+ const out = new Set()
281
+ for (let i = 0; i + 2 <= t.length; i++) out.add(t.slice(i, i + 2))
282
+ return [...out]
283
+ }
284
+ const coverage = (p2.kids ?? []).map((k) => {
285
+ const grams = bigramsOf(k.title)
286
+ const hit = grams.filter(g => p2ParentText.includes(g)).length
287
+ return { title: String(k.title).slice(0, 22), ratio: grams.length ? hit / grams.length : 0 }
288
+ })
289
+ check('P2.8 收口产物是实质内容且逐项覆盖各子任务(不是空壳/不是只交一份)',
290
+ p2ParentText.trim().length > 200 && coverage.every(c => c.ratio >= 0.4),
291
+ `长度=${p2ParentText.trim().length} 覆盖=${coverage.map(c => `${c.title}:${(c.ratio * 100).toFixed(0)}%`).join(' ')}`)
292
+
293
+ // ── 群聊时间线顺序 + @Agent 是否真的回话 ──
294
+ // GET /chat/messages 是**倒序**(新→旧,游标分页 beforeId);比较前先翻回时间顺序
295
+ const hist = await get(`/api/workshop/channels/${channelId}/chat/messages`, B.token)
296
+ const msgs = [...(hist.data?.messages ?? [])].reverse()
297
+ const texts = msgs.map(m => m.text)
298
+ const iPlain = texts.findIndex(t => t.includes('普通发言'))
299
+ const iUser = texts.findIndex(t => t.includes('你盯一下进度'))
300
+ const iAgent = texts.findIndex(t => t.includes('子任务现在什么状态'))
301
+ check('P4.5 群聊时间线按提交顺序排列(不混乱)', iPlain >= 0 && iUser > iPlain && iAgent > iUser,
302
+ `plain@${iPlain} user@${iUser} agent@${iAgent} :: ${texts.map(t => t.slice(0, 8)).join(' > ')}`)
303
+ const agentReplies = msgs.filter(m => m.senderType === 'agent')
304
+ check('P4.6 @Agent 后群聊里出现了 Agent 的回复', agentReplies.length > 0, `agentMessages=${agentReplies.length}`)
305
+
306
+ // ============================================================================
307
+ console.log('\n━━━ P3 群聊请求 → Lead 升级为可追踪根任务(submit_task)━━━')
308
+
309
+ // P3.0 探针:先隔离"Lead 能不能在群里回话"这件事 —— 一句不需要分工的随口问答。
310
+ // 若这一条也没有 lead 消息,说明缺口在"Lead 的群聊回复通路"本身,而不是"升级为任务后没回话"。
311
+ const probeAsk = `一句话回答:HTTP 状态码 404 表示什么?(${TAG})`
312
+ await post(`/api/workshop/channels/${channelId}/chat/messages`, {
313
+ body: { text: `@${leadName} ${probeAsk}`, clientMessageId: `p3-probe-${TAG}` },
314
+ token: B.token,
315
+ })
316
+ const probeReply = await waitFor(
317
+ async () => {
318
+ const h = await get(`/api/workshop/channels/${channelId}/chat/messages`, B.token)
319
+ return (h.data?.messages ?? []).find(m => m.senderType === 'agent' && m.senderId === leadAgentId) ?? null
320
+ }, 300_000, 4000)
321
+ if (probeReply) {
322
+ check('P3.0 Lead 能对群里的一句随口提问**直接回话**(最简单的群聊闭环)',
323
+ true, `text=${String(probeReply.text).slice(0, 60)}`)
324
+ }
325
+ else {
326
+ finding('P3.0 Lead 对群里随口提问的直接回话',
327
+ '3 分钟内 Lead 未回话,该 chat_delivery 仍停在 delivered。注意这条通路本身是**可用**的'
328
+ + '(另一轮实测:delivery 变 consumed 且群里出现 Lead 的回复),因此更像是"Lead 正忙于 supervise 回合 ⇒ 群聊回合排队/超时"'
329
+ + '(实测出现过 supervise 回合 150s 超时被 abort),而不是结构性缺失;但排队过久会让提问者长时间得不到答复,值得关注')
330
+ }
331
+
332
+ const P3_ASK = `请给出这个项目的日志清理作业方案:要包含执行步骤与回滚步骤,做完把结论发到群里。(${TAG})`
333
+ const before = await tasksOf(channelId, A.token)
334
+ const beforeRoots = new Set(rootsOf(before).map(t => t.id))
335
+ // 记下提问前已有的 Lead 群聊消息 id:后面的"结论回群"必须是一条**新**消息,
336
+ // 否则会被 P3.0 那条随口问答的回复冒名顶替(假通过)。
337
+ const leadMsgIdsBefore = new Set(
338
+ [...((await get(`/api/workshop/channels/${channelId}/chat/messages`, B.token)).data?.messages ?? [])]
339
+ .filter(m => m.senderType === 'agent' && m.senderId === leadAgentId)
340
+ .map(m => m.id),
341
+ )
342
+ await post(`/api/workshop/channels/${channelId}/chat/messages`, {
343
+ body: { text: `@${leadName} ${P3_ASK}`, clientMessageId: `p3-ask-${TAG}` },
344
+ token: B.token,
345
+ })
346
+ // Lead 可能先回群聊、再登记任务;轮询等新根任务出现。
347
+ // 窗口给足:Lead 是**单线程串行**的,忙在 supervise 回合时群聊回合会排队(实测出现过 supervise 150s 超时),
348
+ // 窗口太紧会把"排队慢"误报成"没升级"。
349
+ let newRoot = null
350
+ const p3Deadline = Date.now() + 600_000
351
+ while (Date.now() < p3Deadline && !newRoot) {
352
+ const tasks = await tasksOf(channelId, A.token)
353
+ newRoot = rootsOf(tasks).find(t => !beforeRoots.has(t.id)) ?? null
354
+ if (!newRoot) await sleep(2500)
355
+ }
356
+ check('P3.1 Lead 把群聊诉求登记为**可追踪根任务**(submit_task 生效)', Boolean(newRoot),
357
+ newRoot ? `root=${newRoot.id.slice(0, 8)} state=${newRoot.state} title=${String(newRoot.title).slice(0, 40)}` : '5min 内未出现新根任务')
358
+ if (newRoot) {
359
+ check('P3.2 新根任务归属 Lead(creator/assignee 可追溯)',
360
+ newRoot.assigneeId === leadAgentId, `assignee=${String(newRoot.assigneeId).slice(0, 8)} lead=${leadAgentId.slice(0, 8)}`)
361
+ const p3 = await waitRootById(channelId, A.token, newRoot.id, 900_000)
362
+ check('P3.3 该根任务最终收口 COMPLETED', p3.root?.state === 'COMPLETED', `state=${p3.root?.state}`)
363
+ const p3kids = p3.kids ?? []
364
+ const p3Text = p3.root ? artifactsTextOf(p3.root).join(' ') : ''
365
+ // 逻辑要求是"简单自己答、专业才拆",不是"一律拆":所以这里断言的是**闭环成立**——
366
+ // 若拆了则子任务必须全在 worker 名下且已完工;无论如何都必须有实质交付物。
367
+ check('P3.4 群聊来源的作业被真正做完(自己作答或拆给 worker,均有实质交付物)',
368
+ (p3kids.length === 0 || p3kids.every(k => k.state === 'COMPLETED' && workerIds.includes(k.assigneeId)))
369
+ && p3Text.trim().length > 60,
370
+ `children=${p3kids.length} 交付长度=${p3Text.trim().length} 产物=${(p3.root?.artifacts ?? []).map(a => a.name).join(',')}`)
371
+ // 群聊回复是**异步**的 ⇒ 轮询等待;但必须是一条**新**消息(排除 P3.0 的回复)。
372
+ const leadMsg = await waitFor(async () => {
373
+ const h = await get(`/api/workshop/channels/${channelId}/chat/messages`, B.token)
374
+ return [...(h.data?.messages ?? [])]
375
+ .find(m => m.senderType === 'agent' && m.senderId === leadAgentId && !leadMsgIdsBefore.has(m.id)) ?? null
376
+ }, 240_000, 4000)
377
+ if (leadMsg) {
378
+ check('P3.5 Lead 把这次作业的结论回了群(新消息,不是 P3.0 那条)', true,
379
+ `text=${String(leadMsg.text).slice(0, 60)}`)
380
+ }
381
+ else {
382
+ finding('P3.5 升级为任务后把结论回给群里的提问者',
383
+ `作业已收口(交付物 ${p3Text.trim().length} 字,子任务 ${p3kids.length} 个),但群里没有出现针对本次提问的 Lead 新消息 ——`
384
+ + '与"随口问答"那条通路形成对照(那条 chat_delivery 被消费且 Lead 回话成功):'
385
+ + '群聊请求一旦经 submit_task 升级为任务、改由 SchedulerLoop.supervise 驱动,该 chat_delivery 就停在 delivered 永不被消费,'
386
+ + '平台唯一的群聊回复出口(agent-runtime.processMessage 内的 platformReply)走不到 ⇒ 结论只落在任务 deliverable 里,提问者在群里看不到。'
387
+ + '建议:submit_task 记录来源 chat message id,该根任务 complete 时把验收结论镜像进群聊并把对应 chat_deliveries 收敛为 consumed。')
388
+ }
389
+ }
390
+
391
+ // ============================================================================
392
+ const evidence = {
393
+ base: BASE,
394
+ channelId,
395
+ leadAgentId,
396
+ workerIds,
397
+ phases: {
398
+ p1: { title: P1_TITLE, root: p1.root, kids: p1.kids, samples: p1.samples, artifacts: p1Artifacts },
399
+ p2: { title: P2_TITLE, root: p2.root, kids: p2.kids, samples: p2.samples, artifacts: p2Artifacts },
400
+ p3: { ask: P3_ASK, root: newRoot },
401
+ chat: texts,
402
+ },
403
+ notes,
404
+ findings,
405
+ }
406
+ try {
407
+ mkdirSync('.omc/evidence', { recursive: true })
408
+ writeFileSync(EVID, JSON.stringify(evidence, null, 1), 'utf8')
409
+ console.log(`\n证据已写入 ${EVID}`)
410
+ }
411
+ catch (e) {
412
+ console.log(`证据写入失败:${e.message}`)
413
+ }
414
+
415
+ console.log(`\n${'='.repeat(64)}`)
416
+ console.log(`真实作业逻辑 E2E: PASS=${passed} FAIL=${failures} FINDING=${findings.length} BLOCKED=${blocked}`)
417
+ if (failures > 0) console.log('关注项(被验证的逻辑不成立):见上方 FAIL 行')
418
+ for (const f of findings) console.log(` FINDING ${f}`)
419
+ console.log('='.repeat(64))
420
+ // 退出码只反映"被验证的逻辑不成立"(FAIL);已定位根因的产品缺口单列 FINDING
421
+ process.exit(failures > 0 ? 1 : 0)