agentworkshop 0.8.2 → 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 (1557) 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 +3243 -3324
  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/renderer.mjs +1 -1
  377. package/.output/server/chunks/routes/renderer.mjs.map +1 -1
  378. package/.output/server/chunks/virtual/entry.mjs +9357 -10721
  379. package/.output/server/chunks/virtual/entry.mjs.map +1 -1
  380. package/.output/server/chunks/virtual/precomputed.mjs +1 -1
  381. package/.output/server/chunks/virtual/precomputed.mjs.map +1 -1
  382. package/.output/server/package.json +1 -1
  383. package/README-zh.md +2 -2
  384. package/README.md +3 -3
  385. package/app/components/AwLogo.vue +75 -75
  386. package/app/components/aml/AmlDatasetFormModal.vue +279 -279
  387. package/app/components/aml/AmlDatasetTable.vue +319 -319
  388. package/app/components/aml/AmlExperimentsTable.vue +142 -142
  389. package/app/components/aml/AmlInfraBanner.vue +23 -23
  390. package/app/components/aml/AmlJobsTable.vue +248 -248
  391. package/app/components/aml/AmlOverviewBar.vue +62 -62
  392. package/app/components/aml/AmlPageHeader.vue +47 -47
  393. package/app/components/aml/AmlPredictConsole.vue +201 -201
  394. package/app/components/app-header/HitlBell.vue +423 -423
  395. package/app/components/daq/DaqAddNodeModal.vue +209 -209
  396. package/app/components/daq/DaqAlarmBar.vue +46 -46
  397. package/app/components/daq/DaqControlCard.vue +159 -159
  398. package/app/components/daq/DaqInfraBanner.vue +31 -31
  399. package/app/components/daq/DaqLineBanner.vue +47 -47
  400. package/app/components/daq/DaqNodePanel.vue +396 -396
  401. package/app/components/daq/DaqOptPanel.vue +197 -197
  402. package/app/components/daq/DaqTemplateModal.vue +246 -246
  403. package/app/components/dashboard/DashboardGaugeBand.vue +78 -78
  404. package/app/components/dashboard/DashboardHero.vue +209 -209
  405. package/app/components/dashboard/DashboardLineStatePanel.vue +78 -78
  406. package/app/components/dashboard/DashboardNodeStatePanel.vue +46 -46
  407. package/app/components/dashboard/DashboardPipelinePanel.vue +46 -46
  408. package/app/components/dashboard/DashboardTrendPanel.vue +83 -83
  409. package/app/components/dashboard/DashboardWritePanel.vue +52 -52
  410. package/app/components/dcw/DcwCreateLineModal.vue +105 -105
  411. package/app/components/dcw/DcwDeleteLineModal.vue +73 -73
  412. package/app/components/dcw/DcwDetailTemplateModal.vue +238 -238
  413. package/app/components/dcw/DcwLedgerCard.vue +160 -160
  414. package/app/components/dcw/DcwMesArtifacts.vue +140 -140
  415. package/app/components/dcw/DcwProductCreateModal.vue +113 -113
  416. package/app/components/dcw/DcwRecipeDispatchHistoryModal.vue +244 -244
  417. package/app/components/dcw/DcwRecipeEditModal.vue +399 -399
  418. package/app/components/dcw/DcwRecipeHistoryModal.vue +165 -165
  419. package/app/components/dcw/DcwRunDataModal.vue +191 -191
  420. package/app/components/dcw/DcwTemplateModal.vue +227 -227
  421. package/app/components/dcw/DcwWriteHistoryCard.vue +96 -96
  422. package/app/components/dcw/ExpConfirmCard.vue +103 -103
  423. package/app/components/dcw/RecipeDispatchApprovalCard.vue +330 -330
  424. package/app/components/logs/LogsPageHead.vue +71 -71
  425. package/app/components/monitor/MonitorAgentTable.vue +143 -143
  426. package/app/components/monitor/MonitorChannelTable.vue +80 -80
  427. package/app/components/monitor/MonitorLoginGate.vue +24 -24
  428. package/app/components/monitor/MonitorPageHead.vue +92 -92
  429. package/app/components/monitor/MonitorProcessTable.vue +159 -159
  430. package/app/components/ontology/OntologyGraph.vue +356 -356
  431. package/app/components/operations/OperationsFilterCard.vue +164 -164
  432. package/app/components/operations/OperationsPageHead.vue +47 -47
  433. package/app/components/tokens/TokenCreateModal.vue +42 -42
  434. package/app/components/tokens/TokenOnceModal.vue +164 -164
  435. package/app/components/tokens/TokenRenameModal.vue +40 -40
  436. package/app/components/tokens/TokensPageHead.vue +76 -76
  437. package/app/components/workshop/A2aRpcDebugger.vue +237 -237
  438. package/app/components/workshop/AgentInspectorDrawer.vue +424 -424
  439. package/app/components/workshop/AgentLanesView.vue +278 -278
  440. package/app/components/workshop/ArtifactCard.vue +120 -120
  441. package/app/components/workshop/AssetLibrary.vue +452 -452
  442. package/app/components/workshop/ChatMemberPanel.vue +556 -556
  443. package/app/components/workshop/CommandPalette.vue +270 -270
  444. package/app/components/workshop/Composer.vue +540 -540
  445. package/app/components/workshop/DaqTemplateIcon.vue +33 -33
  446. package/app/components/workshop/DeviceTwinPanel.vue +167 -167
  447. package/app/components/workshop/FileSelectorModal.vue +188 -188
  448. package/app/components/workshop/InspectorPanel.vue +301 -301
  449. package/app/components/workshop/PluginSlot.vue +120 -120
  450. package/app/components/workshop/TranscriptTimeline.vue +223 -223
  451. package/app/components/workshop/agents/AgentTemplateEditModal.vue +139 -139
  452. package/app/components/workshop/blocks/ClusterArtifact.vue +61 -61
  453. package/app/components/workshop/blocks/ClusterError.vue +85 -85
  454. package/app/components/workshop/blocks/ClusterLife.vue +87 -87
  455. package/app/components/workshop/blocks/ClusterMember.vue +95 -95
  456. package/app/components/workshop/blocks/ClusterMemory.vue +84 -84
  457. package/app/components/workshop/blocks/ClusterOther.vue +67 -67
  458. package/app/components/workshop/blocks/ClusterStatus.vue +149 -149
  459. package/app/components/workshop/blocks/ClusterTool.vue +176 -176
  460. package/app/components/workshop/blocks/EventBlockAvatar.vue +114 -114
  461. package/app/components/workshop/blocks/EventBlockHead.vue +232 -232
  462. package/app/components/workshop/composer/ComposerToolbar.vue +278 -278
  463. package/app/components/workshop/composer/MentionMenu.vue +135 -135
  464. package/app/components/workshop/composer/ReplyChip.vue +65 -65
  465. package/app/components/workshop/composer/StatusChip.vue +171 -171
  466. package/app/components/workshop/console/Dock.vue +71 -71
  467. package/app/components/workshop/console/LeftPane.vue +84 -84
  468. package/app/components/workshop/device-twin/DeviceTwinCard.vue +265 -265
  469. package/app/components/workshop/device-twin/DeviceTwinDcwSection.vue +203 -203
  470. package/app/components/workshop/lanes/AddMemberModal.vue +270 -270
  471. package/app/components/workshop/lanes/EditMemberModal.vue +106 -106
  472. package/app/components/workshop/lanes/LanesToolbar.vue +97 -97
  473. package/app/components/workshop/session-list/ChannelSettingsModal.vue +3 -3
  474. package/app/components/workshop/session-list/MountChannelModal.vue +124 -124
  475. package/app/components/workshop/session-list/SaveTemplateModal.vue +93 -93
  476. package/app/components/workshop/task-board/Card.vue +172 -172
  477. package/app/components/workshop/task-board/Column.vue +151 -151
  478. package/app/components/workshop/task-board/List.vue +157 -157
  479. package/app/components/workshop/task-board/StatusMenu.vue +88 -88
  480. package/app/components/workshop/teams/TeamAddMemberModal.vue +53 -53
  481. package/app/components/workshop/teams/TeamCreateModal.vue +94 -94
  482. package/app/components/workshop/teams/TeamDeployModal.vue +40 -40
  483. package/app/components/workshop/teams/TeamPluginModal.vue +119 -119
  484. package/app/components/workshop/terminal/OmpTerminalPanel.vue +270 -270
  485. package/app/components/workshop/terminal/TerminalHitlCard.vue +170 -170
  486. package/app/components/workshop/town/TownScene.ts +466 -466
  487. package/app/components/workshop/town/TownView.vue +561 -561
  488. package/app/components/workshop/town/components/AutoModeConfirmModal.vue +94 -94
  489. package/app/components/workshop/town/components/TownAgentBindings.vue +405 -405
  490. package/app/components/workshop/town/components/TownAgentInspector.vue +554 -554
  491. package/app/components/workshop/town/components/TownAlarmList.vue +147 -147
  492. package/app/components/workshop/town/components/TownBoundaryPanel.vue +350 -350
  493. package/app/components/workshop/town/components/TownCalloutLayer.vue +147 -147
  494. package/app/components/workshop/town/components/TownChannelDock.vue +116 -116
  495. package/app/components/workshop/town/components/TownControlDock.vue +405 -405
  496. package/app/components/workshop/town/components/TownDaqNodeInspector.vue +345 -345
  497. package/app/components/workshop/town/components/TownDaqTree.vue +366 -366
  498. package/app/components/workshop/town/components/TownDcwBindSection.vue +473 -473
  499. package/app/components/workshop/town/components/TownDcwNodeInspector.vue +185 -185
  500. package/app/components/workshop/town/components/TownDcwTree.vue +280 -280
  501. package/app/components/workshop/town/components/TownDeviceBindings.vue +394 -394
  502. package/app/components/workshop/town/components/TownDeviceTransform.vue +248 -248
  503. package/app/components/workshop/town/components/TownEventList.vue +120 -120
  504. package/app/components/workshop/town/components/TownHealthBody.vue +100 -100
  505. package/app/components/workshop/town/components/TownKpiStrip.vue +207 -207
  506. package/app/components/workshop/town/components/TownLeftRail.vue +308 -308
  507. package/app/components/workshop/town/components/TownLoadingMask.vue +61 -61
  508. package/app/components/workshop/town/components/TownNavMap.vue +154 -154
  509. package/app/components/workshop/town/components/TownRightRail.vue +543 -543
  510. package/app/components/workshop/town/components/TownStage.vue +281 -281
  511. package/app/components/workshop/town/components/TownStageTop.vue +238 -238
  512. package/app/components/workshop/town/components/TownStatusBar.vue +108 -108
  513. package/app/components/workshop/town/components/TownTopNav.vue +367 -367
  514. package/app/components/workshop/town/components/TownTrendDock.vue +178 -178
  515. package/app/components/workshop/town/scene/town-scene-agents.ts +254 -254
  516. package/app/components/workshop/town/scene/town-scene-behavior.ts +194 -194
  517. package/app/components/workshop/town/scene/town-scene-bubbles.ts +96 -96
  518. package/app/components/workshop/town/scene/town-scene-core.ts +158 -158
  519. package/app/components/workshop/town/scene/town-scene-models.ts +109 -109
  520. package/app/components/workshop/town/scene/town-scene-visuals.ts +279 -279
  521. package/app/components/workshop/town/scene/town-scene3d-agents.ts +308 -308
  522. package/app/components/workshop/town/scene/town-scene3d-blocks.ts +297 -297
  523. package/app/components/workshop/town/scene/town-scene3d-bubbles.ts +281 -281
  524. package/app/components/workshop/town/scene/town-scene3d-camera.ts +282 -282
  525. package/app/components/workshop/town/scene/town-scene3d-devices.ts +433 -433
  526. package/app/components/workshop/town/scene/town-scene3d-editing.ts +490 -490
  527. package/app/components/workshop/town/scene/town-scene3d-events.ts +173 -173
  528. package/app/components/workshop/town/scene/town-scene3d-factory.ts +412 -412
  529. package/app/components/workshop/town/scene/town-scene3d-hud.ts +110 -110
  530. package/app/components/workshop/town/scene/town-scene3d-lifecycle.ts +144 -144
  531. package/app/components/workshop/town/scene/town-scene3d-links.ts +141 -141
  532. package/app/components/workshop/town/scene/town-scene3d-loop.ts +286 -286
  533. package/app/components/workshop/town/scene/town-scene3d-models.ts +154 -154
  534. package/app/components/workshop/town/scene/town-scene3d-nodes.ts +562 -562
  535. package/app/components/workshop/town/scene/town-scene3d-ranges.ts +273 -273
  536. package/app/components/workshop/town/scene/town-scene3d-renderer.ts +320 -320
  537. package/app/components/workshop/town/scene/town-scene3d-selection.ts +257 -257
  538. package/app/components/workshop/town/scene/town-scene3d-types.ts +264 -264
  539. package/app/components/workshop/transcript/TranscriptBlockList.vue +68 -68
  540. package/app/components/workshop/transcript/TranscriptEarlierPager.vue +81 -81
  541. package/app/components/workshop/transcript/TranscriptFilterBar.vue +126 -126
  542. package/app/components/workshop/workbench/CreateWorkspaceModal.vue +36 -36
  543. package/app/components/workshop/workbench/WorkspaceEmpty.vue +56 -56
  544. package/app/composables/useResponsive.ts +88 -88
  545. package/app/composables/workshop/device-twin-types.ts +29 -29
  546. package/app/composables/workshop/event-blocks/attention.ts +58 -58
  547. package/app/composables/workshop/event-blocks/classify.ts +44 -44
  548. package/app/composables/workshop/event-blocks/clusterer.ts +231 -231
  549. package/app/composables/workshop/event-blocks/fold-stream.ts +45 -45
  550. package/app/composables/workshop/event-blocks/markdown.ts +81 -81
  551. package/app/composables/workshop/event-blocks/mentions.ts +49 -49
  552. package/app/composables/workshop/event-blocks/text-utils.ts +100 -100
  553. package/app/composables/workshop/event-blocks/types.ts +40 -40
  554. package/app/composables/workshop/town/town-relay-props.ts +231 -231
  555. package/app/composables/workshop/town/town-view-types.ts +145 -145
  556. package/app/composables/workshop/town/useTownAgentBindings.ts +182 -182
  557. package/app/composables/workshop/town/useTownAgentChat.ts +203 -203
  558. package/app/composables/workshop/town/useTownAlarms.ts +36 -36
  559. package/app/composables/workshop/town/useTownCallouts.ts +174 -174
  560. package/app/composables/workshop/town/useTownChannels.ts +220 -220
  561. package/app/composables/workshop/town/useTownHealth.ts +66 -66
  562. package/app/composables/workshop/town/useTownHudTickers.ts +77 -77
  563. package/app/composables/workshop/town/useTownLayout.ts +277 -277
  564. package/app/composables/workshop/town/useTownNavMap.ts +301 -301
  565. package/app/composables/workshop/town/useTownNodeBindings.ts +345 -345
  566. package/app/composables/workshop/town/useTownPanelDrag.ts +91 -91
  567. package/app/composables/workshop/town/useTownRailData.ts +421 -421
  568. package/app/composables/workshop/town/useTownSceneControl.ts +92 -92
  569. package/app/composables/workshop/town/useTownSceneInput.ts +275 -275
  570. package/app/composables/workshop/town/useTownSceneRuntime.ts +390 -390
  571. package/app/composables/workshop/town/useTownSheets.ts +41 -41
  572. package/app/composables/workshop/town/useTownTrends.ts +93 -93
  573. package/app/composables/workshop/useChannelList.ts +88 -88
  574. package/app/composables/workshop/useChannelTerminals.ts +65 -65
  575. package/app/composables/workshop/useComposerMentions.ts +130 -130
  576. package/app/composables/workshop/useDcwStream.ts +374 -374
  577. package/app/composables/workshop/useDeviceTwinDcwWrite.ts +77 -77
  578. package/app/composables/workshop/useDeviceTwinPanel.ts +56 -56
  579. package/app/composables/workshop/useEscClose.ts +44 -44
  580. package/app/composables/workshop/useEventBlockView.ts +159 -159
  581. package/app/composables/workshop/useEventBlocks.ts +33 -33
  582. package/app/composables/workshop/useHitlAnswer.ts +184 -184
  583. package/app/composables/workshop/useLaneWidths.ts +27 -27
  584. package/app/composables/workshop/useOmpTerminalSession.ts +424 -424
  585. package/app/composables/workshop/usePluginAdmin.ts +152 -152
  586. package/app/composables/workshop/usePluginPanels.ts +72 -72
  587. package/app/composables/workshop/useRuntimeConfigDraft.ts +118 -118
  588. package/app/composables/workshop/useSettingsGroups.ts +243 -243
  589. package/app/composables/workshop/useTaskBoardColumns.ts +47 -47
  590. package/app/composables/workshop/useTerminalRenderer.ts +308 -308
  591. package/app/composables/workshop/useTranscriptEnterStage.ts +48 -48
  592. package/app/composables/workshop/useTranscriptHistory.ts +52 -52
  593. package/app/composables/workshop/useTranscriptScroll.ts +113 -113
  594. package/app/composables/workshop/useVisibleInterval.ts +42 -42
  595. package/app/composables/workshop/useWorkshopWs.ts +265 -265
  596. package/app/config/index.ts +1 -1
  597. package/app/middleware/locale-cookie.global.ts +22 -22
  598. package/app/pages/aml/api.ts +6 -6
  599. package/app/pages/aml/composables/useAmlDatasets.ts +38 -38
  600. package/app/pages/aml/composables/useAmlEntities.ts +57 -57
  601. package/app/pages/aml/composables/useAmlEnv.ts +191 -191
  602. package/app/pages/aml/composables/useAmlExperiments.ts +45 -45
  603. package/app/pages/aml/composables/useAmlFormat.ts +44 -44
  604. package/app/pages/aml/composables/useAmlJobs.ts +131 -131
  605. package/app/pages/aml/composables/useAmlModels.ts +56 -56
  606. package/app/pages/aml/composables/useAmlNotes.ts +47 -47
  607. package/app/pages/aml/composables/useAmlPredict.ts +93 -93
  608. package/app/pages/aml/constants.ts +63 -63
  609. package/app/pages/aml/index.vue +236 -236
  610. package/app/pages/composables/useDashboardCharts.ts +192 -192
  611. package/app/pages/composables/useDashboardData.ts +144 -144
  612. package/app/pages/daq/composables/useDaqAddNode.ts +126 -126
  613. package/app/pages/daq/composables/useDaqDetailBinding.ts +29 -29
  614. package/app/pages/daq/composables/useDaqDetailFrames.ts +42 -42
  615. package/app/pages/daq/composables/useDaqDetailNode.ts +53 -53
  616. package/app/pages/daq/composables/useDaqDetailParams.ts +138 -138
  617. package/app/pages/daq/composables/useDaqFilters.ts +187 -187
  618. package/app/pages/daq/composables/useDaqNodeWindow.ts +86 -86
  619. package/app/pages/daq/composables/useDaqOptimizations.ts +99 -99
  620. package/app/pages/daq/composables/useDaqTemplates.ts +152 -152
  621. package/app/pages/daq/index.vue +260 -260
  622. package/app/pages/dcw/composables/useDcwCards.ts +27 -27
  623. package/app/pages/dcw/composables/useDcwDetailScope.ts +145 -145
  624. package/app/pages/dcw/composables/useDcwDetailTemplates.ts +94 -94
  625. package/app/pages/dcw/composables/useDcwFilter.ts +29 -29
  626. package/app/pages/dcw/composables/useDcwLedger.ts +34 -34
  627. package/app/pages/dcw/composables/useDcwLineMutations.ts +115 -115
  628. package/app/pages/dcw/composables/useDcwLineRun.ts +60 -60
  629. package/app/pages/dcw/composables/useDcwProducts.ts +54 -54
  630. package/app/pages/dcw/composables/useDcwQuery.ts +68 -68
  631. package/app/pages/dcw/composables/useDcwQuickActions.ts +47 -47
  632. package/app/pages/dcw/composables/useDcwRecipes.ts +256 -256
  633. package/app/pages/dcw/composables/useDcwTemplates.ts +50 -50
  634. package/app/pages/dcw/index.vue +195 -195
  635. package/app/pages/dcw/types.ts +9 -9
  636. package/app/pages/index.vue +126 -126
  637. package/app/pages/logs/composables/useLogsFormat.ts +43 -43
  638. package/app/pages/logs/composables/useLogsScope.ts +39 -39
  639. package/app/pages/monitor/types.ts +61 -61
  640. package/app/pages/operations.vue +61 -61
  641. package/app/pages/permissions/index.vue +369 -369
  642. package/app/pages/tokens/composables/useTokenClipboard.ts +33 -33
  643. package/app/pages/tokens/composables/useTokenCreate.ts +93 -93
  644. package/app/pages/tokens/composables/useTokenRename.ts +54 -54
  645. package/app/pages/tokens/composables/useTokenReveal.ts +84 -84
  646. package/app/pages/tokens/composables/useTokensList.ts +60 -60
  647. package/app/pages/tokens.vue +111 -111
  648. package/app/pages/tools/index.vue +98 -98
  649. package/app/pages/workshop/agents.vue +130 -130
  650. package/app/pages/workshop/composables/useAgentHarnessOptions.ts +59 -59
  651. package/app/pages/workshop/composables/useAgentTemplateActions.ts +42 -42
  652. package/app/pages/workshop/composables/useAgentTemplateDialogState.ts +24 -24
  653. package/app/pages/workshop/composables/useAgentTemplateForm.ts +88 -88
  654. package/app/pages/workshop/composables/useAgentTemplatesCatalog.ts +92 -92
  655. package/app/pages/workshop/composables/useTeamActions.ts +44 -44
  656. package/app/pages/workshop/composables/useTeamAddMemberDialog.ts +49 -49
  657. package/app/pages/workshop/composables/useTeamCreateDialog.ts +67 -67
  658. package/app/pages/workshop/composables/useTeamDeployDialog.ts +49 -49
  659. package/app/pages/workshop/composables/useTeamDialogState.ts +46 -46
  660. package/app/pages/workshop/composables/useTeamPluginDialog.ts +72 -72
  661. package/app/pages/workshop/composables/useTeamsCatalog.ts +100 -100
  662. package/app/pages/workshop/composables/useWorkbenchWorkspaces.ts +123 -123
  663. package/app/pages/workshop/composables/useWorkspaceAuth.ts +31 -31
  664. package/app/pages/workshop/composables/useWorkspaceChannels.ts +62 -62
  665. package/app/pages/workshop/composables/useWorkspaceShell.ts +136 -136
  666. package/app/pages/workshop/schedules.vue +553 -553
  667. package/app/pages/workshop/w/[wsId].vue +221 -221
  668. package/app/plugins/aw-plugins.client.ts +213 -213
  669. package/app/plugins/esc-close.client.ts +31 -31
  670. package/app/stores/workshop/hitl.ts +183 -183
  671. package/app/stores/workshop/narrow-fetch.ts +23 -23
  672. package/app/utils/api-error.ts +75 -75
  673. package/app/utils/builtin-catalog.ts +104 -104
  674. package/app/utils/chart-trend.ts +97 -97
  675. package/app/utils/dcw-driver-badge.ts +16 -16
  676. package/app/utils/dcw-recipe-form.ts +26 -26
  677. package/cli/commands/tui.mjs +28 -28
  678. package/cli/commands/update.mjs +124 -124
  679. package/cli/core/child-lifecycle.mjs +136 -136
  680. package/cli/core/meta.mjs +38 -38
  681. package/cli/core/post-build.mjs +96 -96
  682. package/config.yml +1 -1
  683. package/docs/cli.en.md +2 -2
  684. package/docs/cli.md +2 -2
  685. package/docs/mcp.en.md +27 -27
  686. package/docs/multi-harness-architecture.md +248 -248
  687. package/docs/plugins.en.md +1 -1
  688. package/docs/plugins.md +1 -1
  689. package/docs/sdk.en.md +1 -1
  690. package/docs/sdk.md +1 -1
  691. package/docs/tui.md +43 -43
  692. package/i18n/dicts/_en.json +1551 -1551
  693. package/i18n/dicts/_en2.json +300 -300
  694. package/i18n/dicts/_en4.json +114 -114
  695. package/i18n/dicts/agentLanesView.json +61 -61
  696. package/i18n/dicts/appHeader.json +17 -17
  697. package/i18n/dicts/channelSessionList.json +51 -51
  698. package/i18n/dicts/chat.json +79 -79
  699. package/i18n/dicts/clusterTool.json +4 -4
  700. package/i18n/dicts/composer.json +38 -38
  701. package/i18n/dicts/ctpl.json +37 -37
  702. package/i18n/dicts/dcwDetail.json +219 -219
  703. package/i18n/dicts/lineOps.json +14 -14
  704. package/i18n/dicts/multiChannelView.json +13 -13
  705. package/i18n/dicts/notifications.json +13 -13
  706. package/i18n/dicts/taskInspectorDrawer.json +25 -25
  707. package/i18n/dicts/teamPlugins.json +10 -10
  708. package/i18n/dicts/townView.json +209 -209
  709. package/mcp/discovery.mjs +227 -227
  710. package/package.json +1 -1
  711. package/public/favicon.svg +14 -14
  712. package/public/robots.txt +3 -3
  713. package/scripts/_audit/audit-harness-adapters.md +664 -664
  714. package/scripts/_audit/aw-mcp-live-e2e.mjs +293 -293
  715. package/scripts/_audit/bump-version.mjs +51 -51
  716. package/scripts/_audit/detached-instance.mjs +112 -112
  717. package/scripts/_audit/detached-start.mjs +103 -103
  718. package/scripts/_audit/eda-ui-fix-acceptance.mjs +212 -212
  719. package/scripts/_audit/guard-upstream-liveness.mjs +104 -104
  720. package/scripts/_audit/http-api-authz-audit.md +657 -657
  721. package/scripts/_audit/kb-team-mock-e2e.mjs +146 -146
  722. package/scripts/_audit/kb-team-omp-e2e.mjs +229 -229
  723. package/scripts/_audit/run.mjs +21 -21
  724. package/scripts/_audit/runtime-audit.md +716 -716
  725. package/scripts/_audit/skills-guided-e2e.mjs +316 -316
  726. package/scripts/_audit/stability-soak.mjs +252 -252
  727. package/scripts/_audit/stubs/nuxt-imports.mjs +67 -67
  728. package/scripts/_audit/ts-register-hook.mjs +12 -12
  729. package/scripts/_audit/ts-resolve-hook.mjs +96 -96
  730. package/scripts/_aw-packaged-start.cjs +22 -22
  731. package/scripts/_aw0746-stage12.mjs +94 -94
  732. package/scripts/_aw0746-stage34.mjs +136 -136
  733. package/scripts/_aw0746-stage6b-train-sweep.mjs +145 -145
  734. package/scripts/_aw0746-stage6c-jobsmoke.mjs +69 -69
  735. package/scripts/_dbg-configroot-audit.mjs +86 -86
  736. package/scripts/_dbg-daq-intervals-func.mjs +115 -115
  737. package/scripts/_dbg-perms-e2e.mjs +142 -142
  738. package/scripts/_dbg-protocol-matrix.mjs +462 -462
  739. package/scripts/_dbg-render-regression.mjs +193 -193
  740. package/scripts/_dbg-schedule-e2e.mjs +262 -262
  741. package/scripts/_e2e-ui-functional.mjs +371 -371
  742. package/scripts/_i18n-en-cjk-scan.mjs +28 -28
  743. package/scripts/_i18n-en-verify.mjs +107 -107
  744. package/scripts/_i18n-extra-checks.mjs +53 -53
  745. package/scripts/_i18n-scan-hardcoded.mjs +180 -180
  746. package/scripts/_lib-aml-python-run.mjs +17 -17
  747. package/scripts/_lint-reflow.mjs +105 -105
  748. package/scripts/_loop-biax-campaign.mjs +130 -130
  749. package/scripts/_plc-sim-detached.cjs +22 -22
  750. package/scripts/_probe-daq-omp-task.mjs +100 -100
  751. package/scripts/_probe-daq-scope-default.mjs +123 -123
  752. package/scripts/_probe-model-channel-link.cjs +25 -25
  753. package/scripts/_probe-recipe-switch.mjs +92 -92
  754. package/scripts/_provision-injection-line.mjs +39 -39
  755. package/scripts/_run-matrix.ps1 +53 -53
  756. package/scripts/_sweep-button-contrast.mjs +87 -87
  757. package/scripts/acceptance-aml-hybrid-e2e.ts +396 -396
  758. package/scripts/acceptance-aml-hybrid-live.mjs +93 -93
  759. package/scripts/acceptance-aml-model-identity.ts +137 -137
  760. package/scripts/agent-daq-isolation-e2e.mjs +91 -91
  761. package/scripts/api-contract-smoke.mjs +126 -126
  762. package/scripts/ask-hitl-e2e.mjs +96 -96
  763. package/scripts/aw-expose.mjs +159 -159
  764. package/scripts/channel-interaction-smoke.mjs +80 -80
  765. package/scripts/data-studio-ui-e2e.mjs +163 -163
  766. package/scripts/demo-group-chat-all-real.ts +279 -279
  767. package/scripts/demo-group-chat-omp-cases.ts +210 -210
  768. package/scripts/demo-group-chat-omp.ts +184 -184
  769. package/scripts/demo-group-chat-order.ts +197 -197
  770. package/scripts/dev-modbus-simulator.mjs +55 -55
  771. package/scripts/docs-shots.mjs +36 -36
  772. package/scripts/e2e-agentteam-chat.mjs +473 -473
  773. package/scripts/e2e-agentteam-real-triage.mjs +421 -421
  774. package/scripts/e2e-aml-decoupled.mjs +162 -162
  775. package/scripts/e2e-aw-tui-global.mjs +277 -277
  776. package/scripts/e2e-closedloop/cleanup.mjs +27 -27
  777. package/scripts/e2e-closedloop/lib.mjs +109 -109
  778. package/scripts/e2e-closedloop/main.mjs +59 -59
  779. package/scripts/e2e-closedloop/scenarios-accounts.mjs +210 -210
  780. package/scripts/e2e-closedloop/scenarios-authz.mjs +196 -196
  781. package/scripts/e2e-closedloop/scenarios-daq-dcw.mjs +222 -222
  782. package/scripts/e2e-closedloop/scenarios-plugins.mjs +169 -169
  783. package/scripts/e2e-closedloop/state.mjs +10 -10
  784. package/scripts/e2e-config-groups.mjs +238 -238
  785. package/scripts/e2e-crash-cycle.mjs +108 -108
  786. package/scripts/e2e-full-closedloop.mjs +16 -16
  787. package/scripts/e2e-hil-multi-user.mjs +307 -307
  788. package/scripts/e2e-hil-restart.mjs +339 -339
  789. package/scripts/e2e-injection-recipe-closedloop.mjs +203 -203
  790. package/scripts/e2e-line-governance.mjs +352 -352
  791. package/scripts/e2e-ontology.mjs +393 -393
  792. package/scripts/e2e-plc-plugin-closedloop.mjs +549 -549
  793. package/scripts/e2e-timezone-settings.mjs +57 -57
  794. package/scripts/full-stack-shots.mjs +145 -145
  795. package/scripts/full-tool-injection-harness-e2e.mjs +214 -214
  796. package/scripts/hitl-reject-e2e.mjs +131 -131
  797. package/scripts/line-log-smoke.mjs +260 -260
  798. package/scripts/live-aml-mockomp.mjs +304 -304
  799. package/scripts/live-aml-optloop-resume.mjs +322 -322
  800. package/scripts/live-aml-optloop.mjs +588 -588
  801. package/scripts/live-aml-stage9.mjs +169 -169
  802. package/scripts/live-aml-two-goals.mjs +315 -315
  803. package/scripts/live-optloop-two-modes.mjs +857 -857
  804. package/scripts/mes-agent-integration-e2e.mjs +361 -361
  805. package/scripts/ops-plugins-e2e.mjs +85 -85
  806. package/scripts/proof-omp-real.ts +189 -189
  807. package/scripts/scenario-suite-setup.mjs +337 -337
  808. package/scripts/scenario-suite-stability.mjs +144 -144
  809. package/scripts/smoke-optimization-verify.ts +72 -72
  810. package/scripts/team-coordination-e2e.mjs +96 -96
  811. package/scripts/test-agentteam-task-chat-flow.ts +420 -420
  812. package/scripts/test-agentteam-workflow.ts +472 -472
  813. package/scripts/test-aw-skills.mjs +102 -102
  814. package/scripts/test-cli-exit.mjs +343 -343
  815. package/scripts/test-daq-frame-race.mjs +358 -358
  816. package/scripts/test-data-root.mjs +208 -208
  817. package/scripts/test-events-index.mjs +176 -176
  818. package/scripts/test-group-chat-hardening.ts +265 -265
  819. package/scripts/test-group-chat-unit/lib.ts +186 -186
  820. package/scripts/test-group-chat-unit/main.ts +45 -45
  821. package/scripts/test-group-chat-unit/section-a-migration.ts +75 -75
  822. package/scripts/test-group-chat-unit/section-b-permission-matrix.ts +88 -88
  823. package/scripts/test-group-chat-unit/section-c-member-lifecycle.ts +64 -64
  824. package/scripts/test-group-chat-unit/section-d-mention-resolution.ts +36 -36
  825. package/scripts/test-group-chat-unit/section-e-chat-facts.ts +97 -97
  826. package/scripts/test-group-chat-unit/section-f-user-notifications.ts +52 -52
  827. package/scripts/test-group-chat-unit/section-g-member-projection.ts +44 -44
  828. package/scripts/test-group-chat-unit/section-h-outbox-consistency.ts +30 -30
  829. package/scripts/test-group-chat-unit/section-i-read-idempotency.ts +24 -24
  830. package/scripts/test-group-chat-unit/section-j-permission-scope.ts +150 -150
  831. package/scripts/test-group-chat-unit.ts +35 -35
  832. package/scripts/test-hitl-decision.ts +526 -526
  833. package/scripts/test-hitl-legacy-channel-auth.ts +143 -143
  834. package/scripts/test-hitl-registry.ts +112 -112
  835. package/scripts/test-log-flooding.mjs +160 -160
  836. package/scripts/test-lru.mjs +101 -101
  837. package/scripts/test-memory-month-query.mjs +70 -70
  838. package/scripts/test-plugin-hardening.mjs +90 -90
  839. package/scripts/test-plugin-lifecycle.mjs +173 -173
  840. package/scripts/test-rollback-index.mjs +137 -137
  841. package/scripts/test-schedule-runtime.ts +309 -309
  842. package/scripts/test-scheduler-loop/scenarios-supervise.ts +25 -25
  843. package/scripts/test-sdk-surface.mjs +158 -158
  844. package/scripts/test-serial-bridge.mjs +418 -418
  845. package/scripts/test-tui-commands.mjs +148 -148
  846. package/scripts/test-tui-reducers.mjs +72 -72
  847. package/scripts/three-system-e2e/lib.mjs +79 -79
  848. package/scripts/three-system-e2e/main.mjs +40 -40
  849. package/scripts/three-system-e2e/phases/phase-0-user-token.mjs +42 -42
  850. package/scripts/three-system-e2e/phases/phase-0a2-line-autoselect.mjs +35 -35
  851. package/scripts/three-system-e2e/phases/phase-0b-fixture-grants.mjs +39 -39
  852. package/scripts/three-system-e2e/phases/phase-0c-plugin-outbound-auth.mjs +95 -95
  853. package/scripts/three-system-e2e/phases/stage-1-health.mjs +47 -47
  854. package/scripts/three-system-e2e/phases/stage-2-5-team-plugins.mjs +84 -84
  855. package/scripts/three-system-e2e/phases/stage-2-teams-tools-hitl.mjs +184 -184
  856. package/scripts/three-system-e2e/phases/stage-3-diag.mjs +73 -73
  857. package/scripts/three-system-e2e/phases/stage-4-plugin-toggle.mjs +53 -53
  858. package/scripts/three-system-e2e/state.mjs +87 -87
  859. package/scripts/three-system-e2e.mjs +40 -40
  860. package/scripts/tool-face-batch-identity-e2e.mjs +222 -222
  861. package/scripts/tsconfig.json +14 -14
  862. package/scripts/tui-smoke.mjs +100 -100
  863. package/scripts/typecheck.mjs +75 -75
  864. package/scripts/ui/admin-shots.mjs +46 -46
  865. package/scripts/ui/bump-microfont.mjs +39 -39
  866. package/scripts/ui/linkcheck2.mjs +37 -37
  867. package/scripts/ui/live-render-check.mjs +72 -72
  868. package/scripts/ui/md-lint.mjs +80 -80
  869. package/scripts/ui/perf-audit.mjs +132 -132
  870. package/scripts/ui/readme-assets.mjs +30 -30
  871. package/scripts/ui/readme-shots.mjs +42 -42
  872. package/scripts/ui/record-demo.mjs +557 -557
  873. package/scripts/ui/record.mjs +225 -225
  874. package/scripts/ui/seed-admin.mjs +68 -68
  875. package/scripts/ui/seed-demo.mjs +83 -83
  876. package/scripts/ui/seed-industrial-demo.mjs +171 -171
  877. package/scripts/ui/shot-hero.mjs +25 -25
  878. package/scripts/ui/shots.mjs +75 -75
  879. package/scripts/ui/sim-ui-shot.mjs +16 -16
  880. package/scripts/ui/smoke-refactor.mjs +258 -258
  881. package/scripts/ui/verify-nav.mjs +51 -51
  882. package/scripts/ui/verify-responsive.mjs +285 -285
  883. package/sdk/client.d.mts +110 -110
  884. package/sdk/examples/line-sentinel/index.mjs +105 -105
  885. package/sdk/examples/ops-notifier/index.mjs +34 -34
  886. package/sdk/examples/sample-insight/index.mjs +39 -39
  887. package/server/api/plugins/client/[name].get.ts +18 -18
  888. package/server/api/plugins/i18n.get.ts +12 -12
  889. package/server/api/plugins/manifest.get.ts +10 -10
  890. package/server/api/system/backup/list.get.ts +32 -32
  891. package/server/api/system/backup/run.post.ts +21 -21
  892. package/server/api/system/config-groups/[id].delete.ts +21 -21
  893. package/server/api/system/config-groups/[id].patch.ts +26 -26
  894. package/server/api/system/config-groups/index.get.ts +21 -21
  895. package/server/api/system/config-groups/index.post.ts +33 -33
  896. package/server/api/system/timezone.get.ts +20 -20
  897. package/server/api/users/tokens/[id]/token.get.ts +11 -11
  898. package/server/api/workshop/[...path].ts +13 -13
  899. package/server/api/workshop/agent-tools/approvals/index.get.ts +43 -43
  900. package/server/api/workshop/agent-tools/bindings/[id].delete.ts +26 -26
  901. package/server/api/workshop/agent-tools/bindings/grant.post.ts +45 -45
  902. package/server/api/workshop/agent-tools/bindings/index.get.ts +41 -41
  903. package/server/api/workshop/agent-tools/bindings/revoke.post.ts +42 -42
  904. package/server/api/workshop/aml/datasets/[id]/preview.get.ts +68 -68
  905. package/server/api/workshop/aml/datasets/[id].delete.ts +39 -39
  906. package/server/api/workshop/aml/datasets/[id].get.ts +53 -53
  907. package/server/api/workshop/aml/datasets/[id].patch.ts +30 -30
  908. package/server/api/workshop/aml/datasets/index.get.ts +20 -20
  909. package/server/api/workshop/aml/datasets/index.post.ts +27 -27
  910. package/server/api/workshop/aml/entities/index.get.ts +13 -13
  911. package/server/api/workshop/aml/entities/prune.post.ts +28 -28
  912. package/server/api/workshop/aml/env/index.get.ts +13 -13
  913. package/server/api/workshop/aml/env/recheck.post.ts +14 -14
  914. package/server/api/workshop/aml/env/uv.post.ts +21 -21
  915. package/server/api/workshop/aml/env/venv.post.ts +24 -24
  916. package/server/api/workshop/aml/experiments/index.get.ts +35 -35
  917. package/server/api/workshop/aml/index.get.ts +37 -37
  918. package/server/api/workshop/aml/jobs/[id]/cancel.post.ts +21 -21
  919. package/server/api/workshop/aml/jobs/[id]/logs.get.ts +23 -23
  920. package/server/api/workshop/aml/jobs/[id]/retry.post.ts +20 -20
  921. package/server/api/workshop/aml/jobs/[id].delete.ts +44 -44
  922. package/server/api/workshop/aml/jobs/[id].get.ts +23 -23
  923. package/server/api/workshop/aml/jobs/index.get.ts +26 -26
  924. package/server/api/workshop/aml/models/[id]/predict.post.ts +24 -24
  925. package/server/api/workshop/aml/models/[id]/promote.post.ts +30 -30
  926. package/server/api/workshop/aml/models/index.get.ts +48 -48
  927. package/server/api/workshop/aml/training-plans/[id]/train.post.ts +18 -18
  928. package/server/api/workshop/aml/training-plans/[id].delete.ts +18 -18
  929. package/server/api/workshop/aml/training-plans/[id].patch.ts +30 -30
  930. package/server/api/workshop/aml/training-plans/index.get.ts +9 -9
  931. package/server/api/workshop/aml/training-plans/index.post.ts +43 -43
  932. package/server/api/workshop/approvals/[id]/decide.post.ts +30 -30
  933. package/server/api/workshop/approvals/index.get.ts +22 -22
  934. package/server/api/workshop/audit.get.ts +43 -43
  935. package/server/api/workshop/channels/[id]/chat/messages/[messageId]/read.post.ts +22 -22
  936. package/server/api/workshop/channels/[id]/chat/messages/index.get.ts +29 -29
  937. package/server/api/workshop/channels/[id]/chat/messages/index.post.ts +51 -51
  938. package/server/api/workshop/channels/[id]/chat/permissions.get.ts +35 -35
  939. package/server/api/workshop/channels/[id]/index.patch.ts +64 -64
  940. package/server/api/workshop/channels/[id]/members/[userId]/approve.post.ts +20 -20
  941. package/server/api/workshop/channels/[id]/members/[userId].delete.ts +21 -21
  942. package/server/api/workshop/channels/[id]/members/index.get.ts +23 -23
  943. package/server/api/workshop/channels/[id]/members/leave.post.ts +20 -20
  944. package/server/api/workshop/channels/[id]/twin-profile.get.ts +45 -45
  945. package/server/api/workshop/channels/[id]/twin-profile.patch.ts +72 -72
  946. package/server/api/workshop/daq/[id]/test.post.ts +1 -1
  947. package/server/api/workshop/daq/alarms.get.ts +16 -16
  948. package/server/api/workshop/dcw/[id]/write.post.ts +4 -4
  949. package/server/api/workshop/dcw/[id].delete.ts +41 -41
  950. package/server/api/workshop/dcw/[id].patch.ts +40 -40
  951. package/server/api/workshop/dcw/mes-test-read.post.ts +24 -24
  952. package/server/api/workshop/dcw/params/[id]/read.post.ts +17 -17
  953. package/server/api/workshop/dcw/params/[id]/write.post.ts +21 -21
  954. package/server/api/workshop/dcw/params/[id].delete.ts +19 -19
  955. package/server/api/workshop/dcw/params/[id].patch.ts +23 -23
  956. package/server/api/workshop/dcw/params/index.get.ts +27 -27
  957. package/server/api/workshop/dcw/params/index.post.ts +25 -25
  958. package/server/api/workshop/dcw/products/[id].delete.ts +16 -16
  959. package/server/api/workshop/dcw/products/[id].patch.ts +17 -17
  960. package/server/api/workshop/dcw/recipes/[id]/index.patch.ts +22 -22
  961. package/server/api/workshop/dcw/recipes/[id]/versions.get.ts +14 -14
  962. package/server/api/workshop/dcw/recipes/[id].delete.ts +25 -25
  963. package/server/api/workshop/dcw/recipes/index.get.ts +12 -12
  964. package/server/api/workshop/dcw/runs/[id]/close.post.ts +15 -15
  965. package/server/api/workshop/dcw/templates/[key].delete.ts +14 -14
  966. package/server/api/workshop/dcw/templates/[key].patch.ts +16 -16
  967. package/server/api/workshop/dcw/templates/index.post.ts +15 -15
  968. package/server/api/workshop/dcw/test-driver.post.ts +16 -16
  969. package/server/api/workshop/device-twins/[id].delete.ts +25 -25
  970. package/server/api/workshop/eda/runs/[id]/labels.patch.ts +25 -25
  971. package/server/api/workshop/exp/confirmations/[id]/decide.post.ts +41 -41
  972. package/server/api/workshop/exp/confirmations/index.get.ts +25 -25
  973. package/server/api/workshop/harnesses/[id]/providers.get.ts +16 -16
  974. package/server/api/workshop/hitl/respond.post.ts +94 -94
  975. package/server/api/workshop/notifications/index.get.ts +60 -60
  976. package/server/api/workshop/notifications/read.post.ts +31 -31
  977. package/server/api/workshop/ontology/drafts/[draftId]/subgraph.ts +24 -24
  978. package/server/api/workshop/plugins/[name]/disable.post.ts +21 -21
  979. package/server/api/workshop/plugins/[name]/enable.post.ts +21 -21
  980. package/server/api/workshop/plugins/[name]/index.get.ts +14 -14
  981. package/server/api/workshop/schedules/[id]/run.post.ts +15 -15
  982. package/server/api/workshop/schedules/[id]/runs.get.ts +15 -15
  983. package/server/api/workshop/schedules/[id].delete.ts +14 -14
  984. package/server/api/workshop/schedules/[id].get.ts +13 -13
  985. package/server/api/workshop/schedules/[id].patch.ts +29 -29
  986. package/server/api/workshop/schedules/index.get.ts +12 -12
  987. package/server/api/workshop/schedules/index.post.ts +32 -32
  988. package/server/api/workshop/tasks/[id]/reassign.post.ts +32 -32
  989. package/server/api/workshop/tasks/[id]/update.post.ts +35 -35
  990. package/server/api/workshop/teams/[id]/plugins/index.get.ts +36 -36
  991. package/server/api/workshop/teams/[id]/plugins/index.put.ts +42 -42
  992. package/server/api/workshop/ws/audience.ts +56 -56
  993. package/server/api/workshop/ws/db-buffer.ts +68 -68
  994. package/server/api/workshop/ws/event-mapping.ts +47 -47
  995. package/server/api/workshop/ws/handlers.ts +132 -132
  996. package/server/api/workshop/ws/hub.ts +133 -133
  997. package/server/api/workshop/ws/index.ts +23 -23
  998. package/server/api/workshop/ws/notification-uplink.ts +77 -77
  999. package/server/api/workshop/ws/shared.ts +94 -94
  1000. package/server/api/workshop/ws/streams.ts +146 -146
  1001. package/server/middleware/00-security-headers.ts +38 -38
  1002. package/server/middleware/01-rate-guard.ts +101 -101
  1003. package/server/plugins/aml-twin-worker.ts +32 -32
  1004. package/server/plugins/dev-stability-guard.ts +42 -42
  1005. package/server/plugins-builtin/diag-bridge/host/constants.mjs +25 -25
  1006. package/server/plugins-builtin/diag-bridge/host/exports.mjs +104 -104
  1007. package/server/plugins-builtin/diag-bridge/host/helpers.mjs +2 -2
  1008. package/server/plugins-builtin/diag-bridge/host/index.mjs +15 -15
  1009. package/server/plugins-builtin/diag-bridge/host/intents.mjs +62 -62
  1010. package/server/plugins-builtin/diag-bridge/host/plugin.mjs +5 -3
  1011. package/server/plugins-builtin/diag-bridge/host/snapshot.mjs +93 -93
  1012. package/server/plugins-builtin/diag-bridge/index.mjs +9 -9
  1013. package/server/plugins-builtin/serial-bridge/client.mjs +211 -211
  1014. package/server/plugins-builtin/serial-bridge/drivers.mjs +409 -409
  1015. package/server/plugins-builtin/serial-bridge/i18n.json +62 -62
  1016. package/server/plugins-builtin/serial-bridge/index.mjs +247 -247
  1017. package/server/plugins-builtin/serial-bridge/lib.mjs +208 -208
  1018. package/server/plugins-builtin/serial-bridge/rtu.mjs +168 -168
  1019. package/server/services/system-config/contracts.ts +29 -29
  1020. package/server/services/system-config/dispose.ts +19 -19
  1021. package/server/services/system-config/facade.ts +26 -26
  1022. package/server/services/system-config/groups.ts +108 -108
  1023. package/server/services/system-config/index.ts +21 -21
  1024. package/server/services/system-config/init.ts +26 -26
  1025. package/server/services/system-config/mutate.ts +103 -103
  1026. package/server/services/system-config/plugins.ts +104 -104
  1027. package/server/services/system-config/snapshot.ts +59 -59
  1028. package/server/services/system-config/state.ts +79 -79
  1029. package/server/services/system-config/types.ts +58 -58
  1030. package/server/services/workshop/agents/adapters/omp-rpc-client/api.ts +111 -111
  1031. package/server/services/workshop/agents/adapters/omp-rpc-client/contracts.ts +22 -22
  1032. package/server/services/workshop/agents/adapters/omp-rpc-client/facade.ts +7 -7
  1033. package/server/services/workshop/agents/adapters/omp-rpc-client/frames.ts +0 -18
  1034. package/server/services/workshop/agents/adapters/omp-rpc-client/helpers.ts +38 -38
  1035. package/server/services/workshop/agents/adapters/omp-rpc-client/index.ts +25 -25
  1036. package/server/services/workshop/agents/adapters/omp-rpc-client/start.ts +70 -70
  1037. package/server/services/workshop/agents/adapters/omp-rpc-client/state.ts +65 -65
  1038. package/server/services/workshop/agents/adapters/omp-rpc-client/stdout.ts +92 -92
  1039. package/server/services/workshop/agents/adapters/omp-rpc-client/usage.ts +47 -47
  1040. package/server/services/workshop/agents/agent-badge.ts +38 -38
  1041. package/server/services/workshop/agents/binding-authz.ts +60 -60
  1042. package/server/services/workshop/agents/binding-mode.ts +51 -51
  1043. package/server/services/workshop/agents/codex-agent/client.ts +170 -170
  1044. package/server/services/workshop/agents/codex-agent/core.ts +119 -119
  1045. package/server/services/workshop/agents/codex-agent/facade.ts +8 -8
  1046. package/server/services/workshop/agents/codex-agent/helpers.ts +13 -13
  1047. package/server/services/workshop/agents/codex-agent/hitl.ts +138 -138
  1048. package/server/services/workshop/agents/codex-agent/index.ts +14 -14
  1049. package/server/services/workshop/agents/codex-agent/turn.ts +367 -367
  1050. package/server/services/workshop/agents/codex-agent/types.ts +42 -42
  1051. package/server/services/workshop/agents/harness-process.ts +3 -3
  1052. package/server/services/workshop/agents/harness-terminal/api.ts +197 -197
  1053. package/server/services/workshop/agents/harness-terminal/index.ts +17 -17
  1054. package/server/services/workshop/agents/harness-terminal/io.ts +120 -120
  1055. package/server/services/workshop/agents/harness-terminal/park.ts +55 -55
  1056. package/server/services/workshop/agents/harness-terminal/sanitize.ts +98 -98
  1057. package/server/services/workshop/agents/harness-terminal/session.ts +124 -124
  1058. package/server/services/workshop/agents/harness-terminal/shared.ts +74 -74
  1059. package/server/services/workshop/agents/hitl-capabilities.ts +312 -312
  1060. package/server/services/workshop/agents/hitl-decision/answers.ts +32 -32
  1061. package/server/services/workshop/agents/hitl-decision/decide.ts +268 -268
  1062. package/server/services/workshop/agents/hitl-decision/payload.ts +45 -45
  1063. package/server/services/workshop/agents/hitl-decision/shared.ts +108 -108
  1064. package/server/services/workshop/agents/hitl-decision/visibility.ts +94 -94
  1065. package/server/services/workshop/agents/host-tool-bridge/tools/progress.ts +84 -84
  1066. package/server/services/workshop/agents/host-tool-bridge/tools/team-delegation.ts +104 -104
  1067. package/server/services/workshop/agents/host-tool-bridge/tools/team.ts +70 -70
  1068. package/server/services/workshop/agents/industrial/aml-activity.ts +131 -131
  1069. package/server/services/workshop/agents/industrial/audit-query.ts +66 -66
  1070. package/server/services/workshop/agents/industrial/daq-tools.ts +352 -352
  1071. package/server/services/workshop/agents/industrial/exp-tools.ts +104 -104
  1072. package/server/services/workshop/agents/industrial/ops-tools.ts +16 -54
  1073. package/server/services/workshop/agents/industrial/param-tools.ts +69 -69
  1074. package/server/services/workshop/agents/industrial/recipe-gate.ts +6 -19
  1075. package/server/services/workshop/agents/industrial/recipe-propose-tools.ts +1 -1
  1076. package/server/services/workshop/agents/node-bindings.repo.ts +207 -207
  1077. package/server/services/workshop/agents/node-delegation.ts +159 -159
  1078. package/server/services/workshop/agents/omp-agent/core.ts +146 -146
  1079. package/server/services/workshop/agents/omp-agent/facade.ts +8 -8
  1080. package/server/services/workshop/agents/omp-agent/helpers.ts +37 -37
  1081. package/server/services/workshop/agents/omp-agent/index.ts +16 -16
  1082. package/server/services/workshop/agents/omp-agent/tools-steer.ts +1 -18
  1083. package/server/services/workshop/agents/omp-agent/types.ts +45 -45
  1084. package/server/services/workshop/agents/opencode-agent/core.ts +77 -77
  1085. package/server/services/workshop/agents/opencode-agent/facade.ts +8 -8
  1086. package/server/services/workshop/agents/opencode-agent/helpers.ts +29 -29
  1087. package/server/services/workshop/agents/opencode-agent/hitl.ts +113 -113
  1088. package/server/services/workshop/agents/opencode-agent/index.ts +16 -16
  1089. package/server/services/workshop/agents/opencode-agent/lifecycle.ts +44 -44
  1090. package/server/services/workshop/agents/opencode-agent/server.ts +244 -244
  1091. package/server/services/workshop/agents/opencode-agent/turn.ts +278 -278
  1092. package/server/services/workshop/agents/opencode-agent/types.ts +54 -54
  1093. package/server/services/workshop/agents/tool-classes.ts +44 -44
  1094. package/server/services/workshop/aml/clean.ts +120 -120
  1095. package/server/services/workshop/aml/entity.ts +367 -367
  1096. package/server/services/workshop/aml/job-orchestrator/broadcast.ts +37 -37
  1097. package/server/services/workshop/aml/job-orchestrator/control.ts +94 -94
  1098. package/server/services/workshop/aml/job-orchestrator/failure.ts +96 -96
  1099. package/server/services/workshop/aml/job-orchestrator/index.ts +22 -22
  1100. package/server/services/workshop/aml/job-orchestrator/process.ts +101 -101
  1101. package/server/services/workshop/aml/job-orchestrator/shared.ts +53 -53
  1102. package/server/services/workshop/aml/job-orchestrator/status.ts +20 -20
  1103. package/server/services/workshop/aml/job-orchestrator/tick.ts +37 -37
  1104. package/server/services/workshop/aml/python/train-example.py +92 -92
  1105. package/server/services/workshop/aml/runtime.ts +137 -137
  1106. package/server/services/workshop/aml/stats.ts +140 -140
  1107. package/server/services/workshop/aml/twin/calibration-worker.ts +150 -150
  1108. package/server/services/workshop/aml/twin/model-backed-provider.ts +332 -332
  1109. package/server/services/workshop/aml/twin/physics-spec-draft.ts +185 -185
  1110. package/server/services/workshop/aml/twin/prompt-composer.ts +143 -143
  1111. package/server/services/workshop/aml/twin/training-plans.ts +260 -260
  1112. package/server/services/workshop/aml/twin/write-guard.ts +19 -19
  1113. package/server/services/workshop/assets/character-asset.repo.ts +1 -1
  1114. package/server/services/workshop/assets/device-twin.repo.ts +1 -1
  1115. package/server/services/workshop/daq/bus/index.ts +5 -12
  1116. package/server/services/workshop/daq/daq-controller/contracts.ts +39 -39
  1117. package/server/services/workshop/daq/daq-controller/facade.ts +28 -28
  1118. package/server/services/workshop/daq/daq-controller/frames.ts +137 -137
  1119. package/server/services/workshop/daq/daq-controller/helpers.ts +52 -52
  1120. package/server/services/workshop/daq/daq-controller/index.ts +22 -22
  1121. package/server/services/workshop/daq/daq-controller/runtime-control.ts +72 -72
  1122. package/server/services/workshop/daq/daq-controller/sweep-alarms.ts +176 -176
  1123. package/server/services/workshop/daq/daq-controller/tsdb-twin.ts +138 -138
  1124. package/server/services/workshop/daq/drivers/http.ts +95 -95
  1125. package/server/services/workshop/daq/drivers/mock.ts +130 -130
  1126. package/server/services/workshop/daq/drivers/modbus-rtu.ts +67 -67
  1127. package/server/services/workshop/daq/drivers/modbus-tcp.ts +307 -307
  1128. package/server/services/workshop/daq/drivers/opcua.ts +227 -227
  1129. package/server/services/workshop/daq/drivers/s7-stub.ts +29 -29
  1130. package/server/services/workshop/daq/host-bindings.ts +71 -71
  1131. package/server/services/workshop/daq/host-ports.ts +65 -65
  1132. package/server/services/workshop/db/aml-team-seeds.ts +118 -118
  1133. package/server/services/workshop/db/backup-registry.ts +33 -33
  1134. package/server/services/workshop/db/channel-member.repo.ts +122 -122
  1135. package/server/services/workshop/db/channel.repo.ts +203 -203
  1136. package/server/services/workshop/db/chat-message.repo.ts +233 -233
  1137. package/server/services/workshop/db/database/index.ts +18 -18
  1138. package/server/services/workshop/db/database/json.ts +14 -14
  1139. package/server/services/workshop/db/database/open.ts +97 -97
  1140. package/server/services/workshop/db/database/seed-data.ts +60 -60
  1141. package/server/services/workshop/db/hitl-request.repo.ts +221 -221
  1142. package/server/services/workshop/db/notification.repo.ts +199 -199
  1143. package/server/services/workshop/db/readonly.ts +30 -30
  1144. package/server/services/workshop/db/scheduled-task.repo.ts +235 -235
  1145. package/server/services/workshop/db/transaction.ts +72 -72
  1146. package/server/services/workshop/dcw/dcw-controller/contracts.ts +16 -16
  1147. package/server/services/workshop/dcw/dcw-controller/control.ts +78 -78
  1148. package/server/services/workshop/dcw/dcw-controller/facade.ts +19 -19
  1149. package/server/services/workshop/dcw/dcw-controller/index.ts +22 -22
  1150. package/server/services/workshop/dcw/dcw-controller/params.ts +97 -97
  1151. package/server/services/workshop/dcw/dcw-controller/products.ts +103 -103
  1152. package/server/services/workshop/dcw/dcw-controller/write-audit.ts +49 -49
  1153. package/server/services/workshop/dcw/dcw-templates.ts +136 -136
  1154. package/server/services/workshop/dcw/param-conversion.ts +78 -78
  1155. package/server/services/workshop/dcw/param-map.repo.ts +349 -349
  1156. package/server/services/workshop/dcw/plugin-bridge.ts +45 -45
  1157. package/server/services/workshop/dcw/recipe-rollback-manager/contracts.ts +26 -26
  1158. package/server/services/workshop/dcw/recipe-rollback-manager/facade.ts +13 -13
  1159. package/server/services/workshop/dcw/recipe-rollback-manager/helpers.ts +30 -30
  1160. package/server/services/workshop/dcw/recipe-rollback-manager/index.ts +17 -17
  1161. package/server/services/workshop/dcw/recipe-rollback-manager/internal.ts +33 -33
  1162. package/server/services/workshop/dcw/recipe-rollback-manager/judge.ts +52 -52
  1163. package/server/services/workshop/dcw/recipe-rollback-manager/lock.ts +137 -137
  1164. package/server/services/workshop/dcw/recipe-rollback-manager/rollback.ts +190 -190
  1165. package/server/services/workshop/dcw/recipe-rollback-manager/state.ts +21 -21
  1166. package/server/services/workshop/dcw/recipe-rollback-manager/sweep.ts +77 -77
  1167. package/server/services/workshop/dcw/recipe-rollback-manager/types.ts +3 -3
  1168. package/server/services/workshop/dcw/recipe-rollback-manager/views.ts +214 -214
  1169. package/server/services/workshop/exp/exp-collector.ts +275 -275
  1170. package/server/services/workshop/exp/exp-state.repo.ts +339 -339
  1171. package/server/services/workshop/mes/mes-controller.ts +1155 -1155
  1172. package/server/services/workshop/mes/mes-hook.ts +567 -567
  1173. package/server/services/workshop/ontology/subgraph.core.ts +300 -300
  1174. package/server/services/workshop/ontology/subgraph.service.ts +113 -113
  1175. package/server/services/workshop/plugins/host/api.mjs +90 -90
  1176. package/server/services/workshop/plugins/host/config.mjs +135 -135
  1177. package/server/services/workshop/plugins/host/index.mjs +23 -23
  1178. package/server/services/workshop/plugins/host/init.mjs +109 -109
  1179. package/server/services/workshop/plugins/host/load.mjs +321 -321
  1180. package/server/services/workshop/plugins/host/reload.mjs +94 -94
  1181. package/server/services/workshop/plugins/host/rollback.mjs +72 -72
  1182. package/server/services/workshop/plugins/host/state.mjs +54 -54
  1183. package/server/services/workshop/plugins/host/toggle.mjs +64 -64
  1184. package/server/services/workshop/plugins/host.mjs +9 -9
  1185. package/server/services/workshop/runtime/agent-runtime/facade.ts +7 -7
  1186. package/server/services/workshop/runtime/agent-runtime/helpers.ts +18 -18
  1187. package/server/services/workshop/runtime/agent-runtime/index.ts +19 -19
  1188. package/server/services/workshop/runtime/agent-runtime/lifecycle.ts +137 -137
  1189. package/server/services/workshop/runtime/chat-mention.ts +164 -164
  1190. package/server/services/workshop/runtime/chat-projection.ts +246 -246
  1191. package/server/services/workshop/runtime/manager/admin-agents.ts +268 -268
  1192. package/server/services/workshop/runtime/manager/bus.ts +182 -182
  1193. package/server/services/workshop/runtime/manager/channel-template-constants.ts +20 -20
  1194. package/server/services/workshop/runtime/manager/chat-reply.ts +181 -181
  1195. package/server/services/workshop/runtime/manager/chat.ts +384 -384
  1196. package/server/services/workshop/runtime/manager/facade.ts +24 -24
  1197. package/server/services/workshop/runtime/manager/helpers.ts +119 -119
  1198. package/server/services/workshop/runtime/manager/index.ts +42 -42
  1199. package/server/services/workshop/runtime/manager/internal.ts +73 -73
  1200. package/server/services/workshop/runtime/manager/notifications.ts +108 -108
  1201. package/server/services/workshop/runtime/manager/teams.ts +148 -148
  1202. package/server/services/workshop/runtime/memory/contracts.ts +18 -18
  1203. package/server/services/workshop/runtime/memory/facade.ts +10 -10
  1204. package/server/services/workshop/runtime/memory/helpers.ts +196 -196
  1205. package/server/services/workshop/runtime/memory/index.ts +27 -27
  1206. package/server/services/workshop/runtime/memory/score.ts +33 -33
  1207. package/server/services/workshop/runtime/memory/state.ts +40 -40
  1208. package/server/services/workshop/runtime/monitor.ts +3 -3
  1209. package/server/services/workshop/runtime/platform-notice.ts +113 -113
  1210. package/server/services/workshop/runtime/schedule-runtime.ts +347 -347
  1211. package/server/services/workshop/runtime/scheduler-loop/contracts.ts +29 -29
  1212. package/server/services/workshop/runtime/scheduler-loop/facade.ts +7 -7
  1213. package/server/services/workshop/runtime/scheduler-loop/helpers.ts +14 -14
  1214. package/server/services/workshop/runtime/scheduler-loop/index.ts +16 -16
  1215. package/server/services/workshop/runtime/task-engine/facade.ts +7 -7
  1216. package/server/services/workshop/runtime/task-engine/index.ts +15 -15
  1217. package/server/services/workshop/runtime/task-engine/types.ts +3 -3
  1218. package/server/services/workshop/runtime/user-notification-hub.ts +192 -192
  1219. package/server/types/pg.d.ts +49 -49
  1220. package/server/utils/approval-gate.ts +67 -67
  1221. package/server/utils/mojibake-guard.ts +29 -29
  1222. package/server/utils/stability-severity.ts +77 -77
  1223. package/shared/config/groups.mjs +241 -241
  1224. package/shared/dcw-protocol/catalog.ts +232 -232
  1225. package/shared/dcw-protocol/closed-loop.ts +137 -137
  1226. package/shared/lru.mjs +97 -97
  1227. package/tui/README.md +74 -74
  1228. package/tui/aw-tui.mjs +445 -445
  1229. package/tui/commands/index.mjs +287 -287
  1230. package/tui/components/chat-log.mjs +42 -42
  1231. package/tui/components/monitor-pane.mjs +39 -39
  1232. package/tui/components/root.mjs +53 -53
  1233. package/tui/components/status-bar.mjs +33 -33
  1234. package/tui/lib/api.mjs +82 -82
  1235. package/tui/lib/pickers.mjs +121 -121
  1236. package/tui/lib/reducers.mjs +218 -218
  1237. package/tui/lib/state.mjs +86 -86
  1238. package/tui/lib/virtual-terminal.mjs +48 -48
  1239. package/tui/lib/ws.mjs +125 -125
  1240. package/tui/theme.mjs +38 -38
  1241. package/.output/.AgentWorkShop/aml-python/__pycache__/aml_eval.cpython-312.pyc +0 -0
  1242. package/.output/.AgentWorkShop/aml-python/__pycache__/amlkit.cpython-312.pyc +0 -0
  1243. package/.output/.AgentWorkShop/aml-python/__pycache__/train-example.cpython-312.pyc +0 -0
  1244. package/.output/.AgentWorkShop/aml-python/__pycache__/train-hybrid-example.cpython-312.pyc +0 -0
  1245. package/.output/public/_nuxt/BRYBzVMJ.js +0 -1
  1246. package/.output/public/_nuxt/BW2uTUx52.js +0 -2
  1247. package/.output/public/_nuxt/BtZKe9ZV.js +0 -1
  1248. package/.output/public/_nuxt/CfFUK6932.js +0 -2
  1249. package/.output/public/_nuxt/DhW7cFOa.js +0 -1
  1250. package/.output/public/_nuxt/OmpTerminalPanel.ComMDrA8.css +0 -1
  1251. package/.output/public/_nuxt/PluginSlot.CGH0vb95.css +0 -1
  1252. package/.output/public/_nuxt/TownView.CC3t-Dte.css +0 -1
  1253. package/.output/public/_nuxt/aml.PalMp-5n.css +0 -1
  1254. package/.output/public/_nuxt/builds/meta/20934eea-96ab-412d-b0cd-0061716d8cc4.json +0 -1
  1255. package/.output/public/_nuxt/permissions.DxuOOIqQ.css +0 -1
  1256. package/.output/public/_nuxt/schedules.BXNJ9q_I.css +0 -1
  1257. package/.output/public/_nuxt/tools.BwXFAb-X.css +0 -1
  1258. package/.output/server/chunks/build/AuthGate-nF1evO4v.mjs +0 -716
  1259. package/.output/server/chunks/build/AuthGate-nF1evO4v.mjs.map +0 -1
  1260. package/.output/server/chunks/build/FormItemContext-BlyzocS0.mjs +0 -72
  1261. package/.output/server/chunks/build/FormItemContext-BlyzocS0.mjs.map +0 -1
  1262. package/.output/server/chunks/build/OmpTerminalPanel-BhvhQ1gG.mjs +0 -942
  1263. package/.output/server/chunks/build/OmpTerminalPanel-BhvhQ1gG.mjs.map +0 -1
  1264. package/.output/server/chunks/build/PluginSlot-BUKXwV2X.mjs +0 -141
  1265. package/.output/server/chunks/build/PluginSlot-BUKXwV2X.mjs.map +0 -1
  1266. package/.output/server/chunks/build/TownView-BWMDbosY.mjs +0 -6489
  1267. package/.output/server/chunks/build/TownView-BWMDbosY.mjs.map +0 -1
  1268. package/.output/server/chunks/build/_id_-BK-t8nRG.mjs +0 -392
  1269. package/.output/server/chunks/build/_id_-BK-t8nRG.mjs.map +0 -1
  1270. package/.output/server/chunks/build/_id_-CZPlPDm4.mjs +0 -2045
  1271. package/.output/server/chunks/build/_id_-CZPlPDm4.mjs.map +0 -1
  1272. package/.output/server/chunks/build/_wsId_-BPy-Aj9L.mjs +0 -14297
  1273. package/.output/server/chunks/build/_wsId_-BPy-Aj9L.mjs.map +0 -1
  1274. package/.output/server/chunks/build/agents-CpNLdI8E.mjs +0 -1078
  1275. package/.output/server/chunks/build/agents-CpNLdI8E.mjs.map +0 -1
  1276. package/.output/server/chunks/build/alert-D0ivtTGy.mjs +0 -263
  1277. package/.output/server/chunks/build/alert-D0ivtTGy.mjs.map +0 -1
  1278. package/.output/server/chunks/build/aml-DRAFRcGU.mjs +0 -814
  1279. package/.output/server/chunks/build/aml-DRAFRcGU.mjs.map +0 -1
  1280. package/.output/server/chunks/build/analysis-p-dBkjoK.mjs +0 -533
  1281. package/.output/server/chunks/build/analysis-p-dBkjoK.mjs.map +0 -1
  1282. package/.output/server/chunks/build/api-B4Om0mEc.mjs.map +0 -1
  1283. package/.output/server/chunks/build/api-BEW_ebY_.mjs.map +0 -1
  1284. package/.output/server/chunks/build/api-BsAgXWxi.mjs.map +0 -1
  1285. package/.output/server/chunks/build/api-error-BwAQLw44.mjs +0 -47
  1286. package/.output/server/chunks/build/api-error-BwAQLw44.mjs.map +0 -1
  1287. package/.output/server/chunks/build/apiClient-BvXtNzC8.mjs +0 -81
  1288. package/.output/server/chunks/build/apiClient-BvXtNzC8.mjs.map +0 -1
  1289. package/.output/server/chunks/build/board-Dl2Ar22r.mjs +0 -178
  1290. package/.output/server/chunks/build/board-Dl2Ar22r.mjs.map +0 -1
  1291. package/.output/server/chunks/build/card-Cqk0Ur-L.mjs +0 -953
  1292. package/.output/server/chunks/build/card-Cqk0Ur-L.mjs.map +0 -1
  1293. package/.output/server/chunks/build/channel-templates-ByHOQQkO.mjs +0 -942
  1294. package/.output/server/chunks/build/channel-templates-ByHOQQkO.mjs.map +0 -1
  1295. package/.output/server/chunks/build/checkbox-CrT4cnfu.mjs +0 -439
  1296. package/.output/server/chunks/build/checkbox-CrT4cnfu.mjs.map +0 -1
  1297. package/.output/server/chunks/build/client-only-qNA2OVV_.mjs +0 -43
  1298. package/.output/server/chunks/build/client-only-qNA2OVV_.mjs.map +0 -1
  1299. package/.output/server/chunks/build/core-CgTOPS4t.mjs +0 -294
  1300. package/.output/server/chunks/build/core-CgTOPS4t.mjs.map +0 -1
  1301. package/.output/server/chunks/build/daq-CdxcfY_G.mjs +0 -1266
  1302. package/.output/server/chunks/build/daq-CdxcfY_G.mjs.map +0 -1
  1303. package/.output/server/chunks/build/data-D8uX1dnm.mjs +0 -481
  1304. package/.output/server/chunks/build/data-D8uX1dnm.mjs.map +0 -1
  1305. package/.output/server/chunks/build/dcw-BlDQtS4q.mjs +0 -505
  1306. package/.output/server/chunks/build/dcw-BlDQtS4q.mjs.map +0 -1
  1307. package/.output/server/chunks/build/default-CNWS6NUw.mjs +0 -2353
  1308. package/.output/server/chunks/build/default-CNWS6NUw.mjs.map +0 -1
  1309. package/.output/server/chunks/build/descriptions-BNlfKG9y.mjs +0 -406
  1310. package/.output/server/chunks/build/descriptions-BNlfKG9y.mjs.map +0 -1
  1311. package/.output/server/chunks/build/drawer-Caji0PLs.mjs +0 -834
  1312. package/.output/server/chunks/build/drawer-Caji0PLs.mjs.map +0 -1
  1313. package/.output/server/chunks/build/dropdown-BNwTVGde.mjs +0 -14
  1314. package/.output/server/chunks/build/dropdown-BNwTVGde.mjs.map +0 -1
  1315. package/.output/server/chunks/build/dropdown-Cd-xPhR6.mjs +0 -540
  1316. package/.output/server/chunks/build/dropdown-Cd-xPhR6.mjs.map +0 -1
  1317. package/.output/server/chunks/build/es-Bxu10NJ2.mjs.map +0 -1
  1318. package/.output/server/chunks/build/firstNotUndefined-8H5_qHUu.mjs +0 -2448
  1319. package/.output/server/chunks/build/firstNotUndefined-8H5_qHUu.mjs.map +0 -1
  1320. package/.output/server/chunks/build/form-D_UpWPN4.mjs +0 -4712
  1321. package/.output/server/chunks/build/form-D_UpWPN4.mjs.map +0 -1
  1322. package/.output/server/chunks/build/hasIn-DBdElbjM.mjs +0 -553
  1323. package/.output/server/chunks/build/hasIn-DBdElbjM.mjs.map +0 -1
  1324. package/.output/server/chunks/build/hitl-Bd30yr1J.mjs +0 -132
  1325. package/.output/server/chunks/build/hitl-Bd30yr1J.mjs.map +0 -1
  1326. package/.output/server/chunks/build/input-GtPuSEgt.mjs +0 -2181
  1327. package/.output/server/chunks/build/input-GtPuSEgt.mjs.map +0 -1
  1328. package/.output/server/chunks/build/input-number-BNlNDK7H.mjs +0 -1120
  1329. package/.output/server/chunks/build/input-number-BNlNDK7H.mjs.map +0 -1
  1330. package/.output/server/chunks/build/interval-DvHBIIZh.mjs +0 -9
  1331. package/.output/server/chunks/build/interval-DvHBIIZh.mjs.map +0 -1
  1332. package/.output/server/chunks/build/isNumeric-CP7q_yhz.mjs +0 -7
  1333. package/.output/server/chunks/build/isNumeric-CP7q_yhz.mjs.map +0 -1
  1334. package/.output/server/chunks/build/logs-pRb-TMWa.mjs +0 -427
  1335. package/.output/server/chunks/build/logs-pRb-TMWa.mjs.map +0 -1
  1336. package/.output/server/chunks/build/menu-BXt-X0dt.mjs +0 -1952
  1337. package/.output/server/chunks/build/menu-BXt-X0dt.mjs.map +0 -1
  1338. package/.output/server/chunks/build/monitor-Cq6hRFeQ.mjs +0 -2253
  1339. package/.output/server/chunks/build/monitor-Cq6hRFeQ.mjs.map +0 -1
  1340. package/.output/server/chunks/build/ontology-DK0Mf0zT.mjs +0 -1406
  1341. package/.output/server/chunks/build/ontology-DK0Mf0zT.mjs.map +0 -1
  1342. package/.output/server/chunks/build/operations-SMQrRAcr.mjs +0 -311
  1343. package/.output/server/chunks/build/operations-SMQrRAcr.mjs.map +0 -1
  1344. package/.output/server/chunks/build/optimizer-BlWTsM-W.mjs +0 -202
  1345. package/.output/server/chunks/build/optimizer-BlWTsM-W.mjs.map +0 -1
  1346. package/.output/server/chunks/build/pages-AFRP4-EL.mjs +0 -542
  1347. package/.output/server/chunks/build/pages-AFRP4-EL.mjs.map +0 -1
  1348. package/.output/server/chunks/build/pagination-DTAconUo.mjs +0 -1346
  1349. package/.output/server/chunks/build/pagination-DTAconUo.mjs.map +0 -1
  1350. package/.output/server/chunks/build/permissions-DgXQZSyx.mjs +0 -637
  1351. package/.output/server/chunks/build/permissions-DgXQZSyx.mjs.map +0 -1
  1352. package/.output/server/chunks/build/plugins-LRjaSEZy.mjs +0 -272
  1353. package/.output/server/chunks/build/plugins-LRjaSEZy.mjs.map +0 -1
  1354. package/.output/server/chunks/build/popconfirm-DxYPGRgS.mjs +0 -340
  1355. package/.output/server/chunks/build/popconfirm-DxYPGRgS.mjs.map +0 -1
  1356. package/.output/server/chunks/build/responsiveObserve-DM3hpzhU.mjs +0 -78
  1357. package/.output/server/chunks/build/responsiveObserve-DM3hpzhU.mjs.map +0 -1
  1358. package/.output/server/chunks/build/schedules-dSnr8url.mjs +0 -7172
  1359. package/.output/server/chunks/build/schedules-dSnr8url.mjs.map +0 -1
  1360. package/.output/server/chunks/build/segmented-D3HWtHPw.mjs +0 -341
  1361. package/.output/server/chunks/build/segmented-D3HWtHPw.mjs.map +0 -1
  1362. package/.output/server/chunks/build/select-B3Dsb9yq.mjs +0 -3923
  1363. package/.output/server/chunks/build/select-B3Dsb9yq.mjs.map +0 -1
  1364. package/.output/server/chunks/build/settings-BrIhnS2Z.mjs +0 -1014
  1365. package/.output/server/chunks/build/settings-BrIhnS2Z.mjs.map +0 -1
  1366. package/.output/server/chunks/build/space-Dwu2Skt8.mjs +0 -110
  1367. package/.output/server/chunks/build/space-Dwu2Skt8.mjs.map +0 -1
  1368. package/.output/server/chunks/build/spin-C2cuvGth.mjs +0 -357
  1369. package/.output/server/chunks/build/spin-C2cuvGth.mjs.map +0 -1
  1370. package/.output/server/chunks/build/studio-cdoNCfyy.mjs +0 -332
  1371. package/.output/server/chunks/build/studio-cdoNCfyy.mjs.map +0 -1
  1372. package/.output/server/chunks/build/switch-CyR-H6Fb.mjs +0 -377
  1373. package/.output/server/chunks/build/switch-CyR-H6Fb.mjs.map +0 -1
  1374. package/.output/server/chunks/build/table-CmVD-cA9.mjs +0 -7546
  1375. package/.output/server/chunks/build/table-CmVD-cA9.mjs.map +0 -1
  1376. package/.output/server/chunks/build/tabs-Vg0e7cZE.mjs +0 -1924
  1377. package/.output/server/chunks/build/tabs-Vg0e7cZE.mjs.map +0 -1
  1378. package/.output/server/chunks/build/tag-y0sn-xv9.mjs +0 -1156
  1379. package/.output/server/chunks/build/tag-y0sn-xv9.mjs.map +0 -1
  1380. package/.output/server/chunks/build/teams-B1d32eHK.mjs +0 -1203
  1381. package/.output/server/chunks/build/teams-B1d32eHK.mjs.map +0 -1
  1382. package/.output/server/chunks/build/tokens-GYaGJ35Z.mjs +0 -1062
  1383. package/.output/server/chunks/build/tokens-GYaGJ35Z.mjs.map +0 -1
  1384. package/.output/server/chunks/build/tools-s_9U1Djj.mjs +0 -487
  1385. package/.output/server/chunks/build/tools-s_9U1Djj.mjs.map +0 -1
  1386. package/.output/server/chunks/build/tooltip-C2n2nNiQ.mjs +0 -920
  1387. package/.output/server/chunks/build/tooltip-C2n2nNiQ.mjs.map +0 -1
  1388. package/.output/server/chunks/build/town-B5aoiG98.mjs +0 -133
  1389. package/.output/server/chunks/build/town-B5aoiG98.mjs.map +0 -1
  1390. package/.output/server/chunks/build/useAgentHarnessOptions-DOrQHeBh.mjs +0 -124
  1391. package/.output/server/chunks/build/useAgentHarnessOptions-DOrQHeBh.mjs.map +0 -1
  1392. package/.output/server/chunks/build/useAgentTemplateActions-CzlplRWh.mjs +0 -77
  1393. package/.output/server/chunks/build/useAgentTemplateActions-CzlplRWh.mjs.map +0 -1
  1394. package/.output/server/chunks/build/useAgentTemplateForm-DQo1enf2.mjs +0 -117
  1395. package/.output/server/chunks/build/useAgentTemplateForm-DQo1enf2.mjs.map +0 -1
  1396. package/.output/server/chunks/build/useAgentTemplatesCatalog-DP-iMmqz.mjs +0 -133
  1397. package/.output/server/chunks/build/useAgentTemplatesCatalog-DP-iMmqz.mjs.map +0 -1
  1398. package/.output/server/chunks/build/useAmlDatasets-DeoE1idn.mjs +0 -92
  1399. package/.output/server/chunks/build/useAmlDatasets-DeoE1idn.mjs.map +0 -1
  1400. package/.output/server/chunks/build/useAmlEntities-BJhvdqHJ.mjs +0 -86
  1401. package/.output/server/chunks/build/useAmlEntities-BJhvdqHJ.mjs.map +0 -1
  1402. package/.output/server/chunks/build/useAmlEnv-CDIZ6xTe.mjs +0 -194
  1403. package/.output/server/chunks/build/useAmlEnv-CDIZ6xTe.mjs.map +0 -1
  1404. package/.output/server/chunks/build/useAmlExperiments-Dloi834i.mjs +0 -89
  1405. package/.output/server/chunks/build/useAmlExperiments-Dloi834i.mjs.map +0 -1
  1406. package/.output/server/chunks/build/useAmlJobs-BF9LpwXz.mjs +0 -267
  1407. package/.output/server/chunks/build/useAmlJobs-BF9LpwXz.mjs.map +0 -1
  1408. package/.output/server/chunks/build/useAmlModels-_bweOr3R.mjs +0 -93
  1409. package/.output/server/chunks/build/useAmlModels-_bweOr3R.mjs.map +0 -1
  1410. package/.output/server/chunks/build/useAmlNotes-DQj980iX.mjs +0 -86
  1411. package/.output/server/chunks/build/useAmlNotes-DQj980iX.mjs.map +0 -1
  1412. package/.output/server/chunks/build/useAmlPredict-DHNgDSJn.mjs +0 -130
  1413. package/.output/server/chunks/build/useAmlPredict-DHNgDSJn.mjs.map +0 -1
  1414. package/.output/server/chunks/build/useAnalysisFeed-BrEGV_9x.mjs +0 -129
  1415. package/.output/server/chunks/build/useAnalysisFeed-BrEGV_9x.mjs.map +0 -1
  1416. package/.output/server/chunks/build/useDaqAddNode-D_Rkju0f.mjs +0 -142
  1417. package/.output/server/chunks/build/useDaqAddNode-D_Rkju0f.mjs.map +0 -1
  1418. package/.output/server/chunks/build/useDaqDetailBinding-DCWaLKXT.mjs +0 -70
  1419. package/.output/server/chunks/build/useDaqDetailBinding-DCWaLKXT.mjs.map +0 -1
  1420. package/.output/server/chunks/build/useDaqDetailFrames-BOIcOJRB.mjs +0 -79
  1421. package/.output/server/chunks/build/useDaqDetailFrames-BOIcOJRB.mjs.map +0 -1
  1422. package/.output/server/chunks/build/useDaqDetailHistory-D6WulPVs.mjs +0 -176
  1423. package/.output/server/chunks/build/useDaqDetailHistory-D6WulPVs.mjs.map +0 -1
  1424. package/.output/server/chunks/build/useDaqDetailNode-DeOsDxK5.mjs +0 -99
  1425. package/.output/server/chunks/build/useDaqDetailNode-DeOsDxK5.mjs.map +0 -1
  1426. package/.output/server/chunks/build/useDaqDetailParams-Cm9a9r5G.mjs +0 -159
  1427. package/.output/server/chunks/build/useDaqDetailParams-Cm9a9r5G.mjs.map +0 -1
  1428. package/.output/server/chunks/build/useDaqFilters-CctmO03p.mjs +0 -222
  1429. package/.output/server/chunks/build/useDaqFilters-CctmO03p.mjs.map +0 -1
  1430. package/.output/server/chunks/build/useDaqOptimizations-CmX_dpBc.mjs +0 -136
  1431. package/.output/server/chunks/build/useDaqOptimizations-CmX_dpBc.mjs.map +0 -1
  1432. package/.output/server/chunks/build/useDaqStream-B9ZBVQrI.mjs +0 -395
  1433. package/.output/server/chunks/build/useDaqStream-B9ZBVQrI.mjs.map +0 -1
  1434. package/.output/server/chunks/build/useDaqTemplates-CK37sMfi.mjs +0 -187
  1435. package/.output/server/chunks/build/useDaqTemplates-CK37sMfi.mjs.map +0 -1
  1436. package/.output/server/chunks/build/useDashboardData-B36wVWo2.mjs +0 -153
  1437. package/.output/server/chunks/build/useDashboardData-B36wVWo2.mjs.map +0 -1
  1438. package/.output/server/chunks/build/useDcwAddNode-DACVcEHs.mjs +0 -219
  1439. package/.output/server/chunks/build/useDcwAddNode-DACVcEHs.mjs.map +0 -1
  1440. package/.output/server/chunks/build/useDcwCards-SaiImIYQ.mjs.map +0 -1
  1441. package/.output/server/chunks/build/useDcwDetailScope-DLOklSMO.mjs +0 -184
  1442. package/.output/server/chunks/build/useDcwDetailScope-DLOklSMO.mjs.map +0 -1
  1443. package/.output/server/chunks/build/useDcwDetailTemplates-ClmIdZ40.mjs +0 -148
  1444. package/.output/server/chunks/build/useDcwDetailTemplates-ClmIdZ40.mjs.map +0 -1
  1445. package/.output/server/chunks/build/useDcwFilter-CPMyCltx.mjs +0 -71
  1446. package/.output/server/chunks/build/useDcwFilter-CPMyCltx.mjs.map +0 -1
  1447. package/.output/server/chunks/build/useDcwLedger-0ie-0WTc.mjs.map +0 -1
  1448. package/.output/server/chunks/build/useDcwLineMutations-DNxo66yM.mjs +0 -137
  1449. package/.output/server/chunks/build/useDcwLineMutations-DNxo66yM.mjs.map +0 -1
  1450. package/.output/server/chunks/build/useDcwLineRun-CHskwscT.mjs +0 -104
  1451. package/.output/server/chunks/build/useDcwLineRun-CHskwscT.mjs.map +0 -1
  1452. package/.output/server/chunks/build/useDcwParamApprovals-DtScUc-W.mjs +0 -121
  1453. package/.output/server/chunks/build/useDcwParamApprovals-DtScUc-W.mjs.map +0 -1
  1454. package/.output/server/chunks/build/useDcwProducts-BMaxzLu6.mjs +0 -93
  1455. package/.output/server/chunks/build/useDcwProducts-BMaxzLu6.mjs.map +0 -1
  1456. package/.output/server/chunks/build/useDcwQuery-TVU3Eo0M.mjs +0 -98
  1457. package/.output/server/chunks/build/useDcwQuery-TVU3Eo0M.mjs.map +0 -1
  1458. package/.output/server/chunks/build/useDcwQuickActions-BREFmR9T.mjs +0 -88
  1459. package/.output/server/chunks/build/useDcwQuickActions-BREFmR9T.mjs.map +0 -1
  1460. package/.output/server/chunks/build/useDcwRecipes-Bc9urA1N.mjs +0 -258
  1461. package/.output/server/chunks/build/useDcwRecipes-Bc9urA1N.mjs.map +0 -1
  1462. package/.output/server/chunks/build/useDcwStream-Dir5ufAU.mjs +0 -452
  1463. package/.output/server/chunks/build/useDcwStream-Dir5ufAU.mjs.map +0 -1
  1464. package/.output/server/chunks/build/useDcwTemplates-BzagZztS.mjs +0 -91
  1465. package/.output/server/chunks/build/useDcwTemplates-BzagZztS.mjs.map +0 -1
  1466. package/.output/server/chunks/build/useDcwWrites-BROwTLCn.mjs +0 -140
  1467. package/.output/server/chunks/build/useDcwWrites-BROwTLCn.mjs.map +0 -1
  1468. package/.output/server/chunks/build/useDeviceTwins-BqwVJaZg.mjs +0 -128
  1469. package/.output/server/chunks/build/useDeviceTwins-BqwVJaZg.mjs.map +0 -1
  1470. package/.output/server/chunks/build/useExpConfirmations-BM626N4p.mjs +0 -107
  1471. package/.output/server/chunks/build/useExpConfirmations-BM626N4p.mjs.map +0 -1
  1472. package/.output/server/chunks/build/useLocalTime-uVSM44Um.mjs +0 -55
  1473. package/.output/server/chunks/build/useLocalTime-uVSM44Um.mjs.map +0 -1
  1474. package/.output/server/chunks/build/useLogsManual-cVBZQ_Mt.mjs +0 -88
  1475. package/.output/server/chunks/build/useLogsManual-cVBZQ_Mt.mjs.map +0 -1
  1476. package/.output/server/chunks/build/useLogsQuery-D7hrJ3yn.mjs +0 -150
  1477. package/.output/server/chunks/build/useLogsQuery-D7hrJ3yn.mjs.map +0 -1
  1478. package/.output/server/chunks/build/useLogsScope-aaPQeTRm.mjs +0 -83
  1479. package/.output/server/chunks/build/useLogsScope-aaPQeTRm.mjs.map +0 -1
  1480. package/.output/server/chunks/build/useMonitorData-DIkiLr_h.mjs +0 -135
  1481. package/.output/server/chunks/build/useMonitorData-DIkiLr_h.mjs.map +0 -1
  1482. package/.output/server/chunks/build/useMonitorFormat-CyURtH8N.mjs +0 -91
  1483. package/.output/server/chunks/build/useMonitorFormat-CyURtH8N.mjs.map +0 -1
  1484. package/.output/server/chunks/build/useOperationsFeed-Ci4mZAn_.mjs +0 -195
  1485. package/.output/server/chunks/build/useOperationsFeed-Ci4mZAn_.mjs.map +0 -1
  1486. package/.output/server/chunks/build/useOpsLog-C-M6Eace.mjs +0 -149
  1487. package/.output/server/chunks/build/useOpsLog-C-M6Eace.mjs.map +0 -1
  1488. package/.output/server/chunks/build/useRecipeDispatchApprovals-BYtiqfeb.mjs +0 -156
  1489. package/.output/server/chunks/build/useRecipeDispatchApprovals-BYtiqfeb.mjs.map +0 -1
  1490. package/.output/server/chunks/build/useTeamActions-I_8QWp9w.mjs +0 -79
  1491. package/.output/server/chunks/build/useTeamActions-I_8QWp9w.mjs.map +0 -1
  1492. package/.output/server/chunks/build/useTeamAddMemberDialog-BLn4nTuy.mjs +0 -84
  1493. package/.output/server/chunks/build/useTeamAddMemberDialog-BLn4nTuy.mjs.map +0 -1
  1494. package/.output/server/chunks/build/useTeamCreateDialog-Bp5qKtpI.mjs +0 -97
  1495. package/.output/server/chunks/build/useTeamCreateDialog-Bp5qKtpI.mjs.map +0 -1
  1496. package/.output/server/chunks/build/useTeamDeployDialog-DwIaz6Cx.mjs +0 -80
  1497. package/.output/server/chunks/build/useTeamDeployDialog-DwIaz6Cx.mjs.map +0 -1
  1498. package/.output/server/chunks/build/useTeamPluginDialog-B932gZOI.mjs +0 -103
  1499. package/.output/server/chunks/build/useTeamPluginDialog-B932gZOI.mjs.map +0 -1
  1500. package/.output/server/chunks/build/useTeamsCatalog-DBwaLQBw.mjs +0 -123
  1501. package/.output/server/chunks/build/useTeamsCatalog-DBwaLQBw.mjs.map +0 -1
  1502. package/.output/server/chunks/build/useTokenCreate-Ctl0YGhL.mjs +0 -115
  1503. package/.output/server/chunks/build/useTokenCreate-Ctl0YGhL.mjs.map +0 -1
  1504. package/.output/server/chunks/build/useTokenRename-Cm3ypSfN.mjs +0 -87
  1505. package/.output/server/chunks/build/useTokenRename-Cm3ypSfN.mjs.map +0 -1
  1506. package/.output/server/chunks/build/useTokenReveal-CeoWL5Mt.mjs +0 -118
  1507. package/.output/server/chunks/build/useTokenReveal-CeoWL5Mt.mjs.map +0 -1
  1508. package/.output/server/chunks/build/useTokensList-CNIzON3u.mjs +0 -92
  1509. package/.output/server/chunks/build/useTokensList-CNIzON3u.mjs.map +0 -1
  1510. package/.output/server/chunks/build/useWorkbenchAuth-CY-bVFMu.mjs +0 -141
  1511. package/.output/server/chunks/build/useWorkbenchAuth-CY-bVFMu.mjs.map +0 -1
  1512. package/.output/server/chunks/build/useWorkbenchWorkspaces-DhZQFss9.mjs +0 -138
  1513. package/.output/server/chunks/build/useWorkbenchWorkspaces-DhZQFss9.mjs.map +0 -1
  1514. package/.output/server/chunks/build/useWorkshopApi-CaSItJVq.mjs +0 -119
  1515. package/.output/server/chunks/build/useWorkshopApi-CaSItJVq.mjs.map +0 -1
  1516. package/.output/server/chunks/build/useWorkshopWs-YQ5URrbt.mjs +0 -1659
  1517. package/.output/server/chunks/build/useWorkshopWs-YQ5URrbt.mjs.map +0 -1
  1518. package/.output/server/chunks/build/useWorkspaceAuth-Dlvj9csD.mjs.map +0 -1
  1519. package/.output/server/chunks/build/useWorkspaceChannels-CPFepxTN.mjs +0 -92
  1520. package/.output/server/chunks/build/useWorkspaceChannels-CPFepxTN.mjs.map +0 -1
  1521. package/.output/server/chunks/build/useWorkspaceShell-BCypjjjE.mjs +0 -168
  1522. package/.output/server/chunks/build/useWorkspaceShell-BCypjjjE.mjs.map +0 -1
  1523. package/.output/server/chunks/build/users-DjiVC_tS.mjs +0 -569
  1524. package/.output/server/chunks/build/users-DjiVC_tS.mjs.map +0 -1
  1525. package/.output/server/chunks/build/workshop-1gKeDASV.mjs +0 -546
  1526. package/.output/server/chunks/build/workshop-1gKeDASV.mjs.map +0 -1
  1527. package/app/.mimosa/hook-state/sess_05189059-e42d-4188-8911-4f7baabe009b.json +0 -1
  1528. package/app/.mimosa/hook-state/sess_05189059-e42d-4188-8911-4f7baabe009b.mtg0vz68-49792-75b0709555.baseline/1459e6269990a5d229b9228c8b2f62ffaa7d350068380ae8b875fee0db45cca6.source +0 -180
  1529. package/app/.mimosa/hook-state/sess_05189059-e42d-4188-8911-4f7baabe009b.mtg0vz68-49792-75b0709555.baseline/c2991e909c70c5c12b90a407c7adcf63384c51668a2b334e6e047fa675c268fe.source +0 -305
  1530. package/app/.mimosa/hook-state/sess_05189059-e42d-4188-8911-4f7baabe009b.mtg0vz68-49792-75b0709555.baseline/e09129039d1e27e3fac24becc9bdafd2d1a7c8049bff24173df007be865f0165.source +0 -264
  1531. package/app/.mimosa/hook-status/sess_05189059-e42d-4188-8911-4f7baabe009b-28ef7c75ea.json +0 -14
  1532. package/scripts/e2e-direct-rest-simulator-paper.mjs +0 -624
  1533. package/scripts/e2e-pi-simulator-paper.mjs +0 -2316
  1534. package/scripts/e2e-registered-harness-simulator-paper.mjs +0 -1926
  1535. package/scripts/e2e-simulator-optimizer-paper.mjs +0 -264
  1536. package/scripts/fixtures/omp-paper-harness.mjs +0 -163
  1537. package/server/.mimosa/hook-state/sess_869e5bfd-07f4-4b6e-a991-6221fcf6b7d2.json +0 -1
  1538. package/server/.mimosa/hook-state/sess_869e5bfd-07f4-4b6e-a991-6221fcf6b7d2.mvhn1irp-99488-e3fdc1cbfc.baseline/942d2679b87b96c612b4f2a425c3ccc5b6f3234f0cf589a8441602f866fbe277.source +0 -41
  1539. package/server/.mimosa/hook-state/sess_869e5bfd-07f4-4b6e-a991-6221fcf6b7d2.mvhn1irp-99488-e3fdc1cbfc.baseline/dd617a82339d2c61e49e28e416aabeb2fc100fb3cb1beca18d02dfb833214af6.source +0 -51
  1540. package/server/.mimosa/hook-status/sess_869e5bfd-07f4-4b6e-a991-6221fcf6b7d2-e67b6b91bf.json +0 -14
  1541. package/server/services/workshop/.mimosa/hook-state/sess_fed429fb-c8b7-4a50-bbd6-45afc580893f.json +0 -1
  1542. package/server/services/workshop/.mimosa/hook-status/sess_fed429fb-c8b7-4a50-bbd6-45afc580893f-e6b75bbfe6.json +0 -14
  1543. package/server/services/workshop/agents/omp-agent/supervision-history.ts +0 -38
  1544. package/server/services/workshop/aml/python/__pycache__/aml_eval.cpython-312.pyc +0 -0
  1545. package/server/services/workshop/aml/python/__pycache__/amlkit.cpython-312.pyc +0 -0
  1546. package/server/services/workshop/aml/python/__pycache__/train-example.cpython-312.pyc +0 -0
  1547. package/server/services/workshop/aml/python/__pycache__/train-hybrid-example.cpython-312.pyc +0 -0
  1548. package/server/services/workshop/optimization/python/.mimosa/hook-state/session_187ec97f45d4bd02369bbe94da527cf1.json +0 -1
  1549. package/server/services/workshop/optimization/python/.mimosa/hook-state/session_187ec97f45d4bd02369bbe94da527cf1.mvjqkcs6-68688-fb7131a89c.baseline/190a6772a4e43801737b4ba6072eb9d53d3099b5d8a9e6f57bc5e8592a26a6c4.source +0 -274
  1550. package/server/services/workshop/optimization/python/.mimosa/hook-status/session_187ec97f45d4bd02369bbe94da527cf1-01ed7f04fa.json +0 -14
  1551. package/server/services/workshop/optimization/python/__pycache__/problems.cpython-312.pyc +0 -0
  1552. /package/.output/public/_nuxt/{9j2J4k4w.js → 9j2J4k4w2.js} +0 -0
  1553. /package/.output/public/_nuxt/{BY3Lbz3h2.js → BY3Lbz3h.js} +0 -0
  1554. /package/.output/public/_nuxt/{Iub61dX92.js → Iub61dX9.js} +0 -0
  1555. /package/.output/public/_nuxt/{Q-JpBT032.js → Q-JpBT03.js} +0 -0
  1556. /package/.output/public/_nuxt/{dVw8IHY62.js → dVw8IHY6.js} +0 -0
  1557. /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)