agentworkshop 0.8.0 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (396) hide show
  1. package/.AgentWorkShop/prompts/host-tools.json +123 -0
  2. package/.output/.AgentWorkShop/prompts/host-tools.json +123 -0
  3. package/.output/nitro.json +1 -1
  4. package/.output/public/_nuxt/{DJJDigim2.js → -FhgRqJl2.js} +1 -1
  5. package/.output/public/_nuxt/{CGk_VUhO2.js → 0qvcO_KM2.js} +1 -1
  6. package/.output/public/_nuxt/26OL4Ao82.js +1 -0
  7. package/.output/public/_nuxt/{sBDZymdy2.js → 2Kwo_j9G2.js} +1 -1
  8. package/.output/public/_nuxt/{BqYVLAcm.js → 2v5GdspM.js} +1 -1
  9. package/.output/public/_nuxt/{DkQBMVTs2.js → 8M7wFbEN2.js} +1 -1
  10. package/.output/public/_nuxt/{DtiY69xi2.js → 8SZLbrI42.js} +1 -1
  11. package/.output/public/_nuxt/{DF32f5EL2.js → B2NbzUau2.js} +1 -1
  12. package/.output/public/_nuxt/{CwZW1ZCe2.js → B4JlRHBB2.js} +1 -1
  13. package/.output/public/_nuxt/{BQOn0q6Y.js → B6C4WofF.js} +1 -1
  14. package/.output/public/_nuxt/{BC7W6lNm.js → B6UwtJ1a.js} +1 -1
  15. package/.output/public/_nuxt/{BfQ-ptH0.js → B8HFUsMH.js} +1 -1
  16. package/.output/public/_nuxt/{DzBbYWrw2.js → BBB_j2LU2.js} +1 -1
  17. package/.output/public/_nuxt/BCLUwdP52.js +1 -0
  18. package/.output/public/_nuxt/{CLxmY3Rh.js → BK4wbfGS.js} +1 -1
  19. package/.output/public/_nuxt/{BRMVDfPl2.js → BKidykmV2.js} +1 -1
  20. package/.output/public/_nuxt/BPUQZ9Lq2.js +8 -0
  21. package/.output/public/_nuxt/BRYBzVMJ.js +1 -0
  22. package/.output/public/_nuxt/{Bj5sjA5O.js → BRci9D_l.js} +1 -1
  23. package/.output/public/_nuxt/{Dmgqz2np2.js → BVGzwAxr2.js} +1 -1
  24. package/.output/public/_nuxt/BVg2R2VB2.js +1 -0
  25. package/.output/public/_nuxt/{C3aUN4Vp2.js → BW2uTUx52.js} +1 -1
  26. package/.output/public/_nuxt/{B5FKaMM02.js → BY3Lbz3h2.js} +1 -1
  27. package/.output/public/_nuxt/{DIwmMa_7.js → BYzim_Bn.js} +1 -1
  28. package/.output/public/_nuxt/{D8xUsQGt.js → B_Obcbiu.js} +1 -1
  29. package/.output/public/_nuxt/BaYDgyaR.js +3 -0
  30. package/.output/public/_nuxt/{DZJ11BTI.js → BbACaREb.js} +1 -1
  31. package/.output/public/_nuxt/{BJrj5JVe2.js → BcosvNXb2.js} +1 -1
  32. package/.output/public/_nuxt/{B_-vAvzb.js → BfeXib9G.js} +1 -1
  33. package/.output/public/_nuxt/{CeLqojCJ.js → BfgTar9L.js} +1 -1
  34. package/.output/public/_nuxt/BfvuWqSa.js +1 -0
  35. package/.output/public/_nuxt/{D8r8PNQa2.js → BiZWwdcD2.js} +1 -1
  36. package/.output/public/_nuxt/{DIFkTkdS.js → BkEokGX5.js} +1 -1
  37. package/.output/public/_nuxt/{CJSohaqk2.js → BklGqEto2.js} +2 -2
  38. package/.output/public/_nuxt/{DkpmSnHX.js → Bko5adbu.js} +1 -1
  39. package/.output/public/_nuxt/{DTQTGA6v2.js → BmBlIIJo2.js} +1 -1
  40. package/.output/public/_nuxt/{D_NjL-Hz.js → Bmvt9ydE.js} +1 -1
  41. package/.output/public/_nuxt/{Cp4r6Eiz.js → BoyuIoSm.js} +1 -1
  42. package/.output/public/_nuxt/{62J4vljm.js → Bq-tmkst.js} +1 -1
  43. package/.output/public/_nuxt/{BMMoqi94.js → BqFaZ4kS.js} +1 -1
  44. package/.output/public/_nuxt/BsJYieAL2.js +1 -0
  45. package/.output/public/_nuxt/{DD4J2Otc.js → BtZKe9ZV.js} +1 -1
  46. package/.output/public/_nuxt/{BnpY_zNx.js → BtumQhZK.js} +1 -1
  47. package/.output/public/_nuxt/{BjLzqWJH2.js → BwWs9EdO2.js} +1 -1
  48. package/.output/public/_nuxt/{Bx2a9cuY2.js → BxxpJxZf2.js} +1 -1
  49. package/.output/public/_nuxt/{qRXa-PM22.js → ByTnUqFw2.js} +1 -1
  50. package/.output/public/_nuxt/{DvOETuoT2.js → Byiiiwc72.js} +1 -1
  51. package/.output/public/_nuxt/{Car2lkbb.js → C1-SuwUN.js} +1 -1
  52. package/.output/public/_nuxt/{Dg81dOEO.js → C14pM5G4.js} +1 -1
  53. package/.output/public/_nuxt/{MDhaRQq_.js → C2Yp-B8m.js} +1 -1
  54. package/.output/public/_nuxt/{BJ2nJNlK2.js → C4e6_nom2.js} +1 -1
  55. package/.output/public/_nuxt/{CiCEprsp2.js → C5OStZJ62.js} +1 -1
  56. package/.output/public/_nuxt/{ByMj6e7s.js → C6lssmvl.js} +2 -2
  57. package/.output/public/_nuxt/{C6uBP0Xa.js → CC-GEjfN.js} +1 -1
  58. package/.output/public/_nuxt/CC2Pv8VL2.js +1 -0
  59. package/.output/public/_nuxt/{DKiqdYnj.js → CCcMgxV9.js} +1 -1
  60. package/.output/public/_nuxt/{5S26I34j2.js → CDL30A2z2.js} +1 -1
  61. package/.output/public/_nuxt/{B8C-QJB5.js → CDYLasP8.js} +1 -1
  62. package/.output/public/_nuxt/CElzwyXQ.js +1 -0
  63. package/.output/public/_nuxt/{2KE8xGVm.js → CEvJu-xI.js} +1 -1
  64. package/.output/public/_nuxt/{CR612R752.js → CFQRFctQ2.js} +1 -1
  65. package/.output/public/_nuxt/{DnzjxC0u.js → CHk9XxNi.js} +2 -2
  66. package/.output/public/_nuxt/{Bx4MR0jd.js → CLFmtXU7.js} +1 -1
  67. package/.output/public/_nuxt/{DW8k_0dQ.js → CMJi6yYS.js} +1 -1
  68. package/.output/public/_nuxt/{DD-r0S1p.js → CPvFGbr8.js} +1 -1
  69. package/.output/public/_nuxt/{CCgbgkid.js → CQSxS_Ek.js} +2 -2
  70. package/.output/public/_nuxt/{jGxHnjW6.js → CQuo31jF.js} +1 -1
  71. package/.output/public/_nuxt/{SoO2K-di.js → CRCrWy-6.js} +1 -1
  72. package/.output/public/_nuxt/CUCFFL9m.js +84 -0
  73. package/.output/public/_nuxt/CZYNy60j2.js +1 -0
  74. package/.output/public/_nuxt/{WPwdj9pg.js → CZsFf7ck.js} +1 -1
  75. package/.output/public/_nuxt/CfFUK6932.js +2 -0
  76. package/.output/public/_nuxt/{DAsjfdZD.js → CfIbFnJz.js} +1 -1
  77. package/.output/public/_nuxt/{Tk6TQZjU.js → CjF4QY9h.js} +1 -1
  78. package/.output/public/_nuxt/{DlUQa0wn.js → Cjo1t2IF.js} +1 -1
  79. package/.output/public/_nuxt/{CDn0eDn8.js → CmuGMxDP.js} +1 -1
  80. package/.output/public/_nuxt/Cn6EojFe.js +1 -0
  81. package/.output/public/_nuxt/{DLqSQbGv.js → CnYazk8d.js} +1 -1
  82. package/.output/public/_nuxt/{DQfy6R_2.js → CnrGVJIr.js} +1 -1
  83. package/.output/public/_nuxt/{C0YL0HKK.js → CtcBhkci.js} +1 -1
  84. package/.output/public/_nuxt/{h5gsh8E92.js → Cv-Mv7_h2.js} +1 -1
  85. package/.output/public/_nuxt/{vPcnBJsa2.js → CzlZrfq82.js} +1 -1
  86. package/.output/public/_nuxt/{C2YYOgMe.js → CznnUTZx.js} +2 -2
  87. package/.output/public/_nuxt/{csitHKnE2.js → D-80EfyA2.js} +1 -1
  88. package/.output/public/_nuxt/{BRdoISnJ2.js → D1C6qtS12.js} +1 -1
  89. package/.output/public/_nuxt/{Cnrmlixo.js → D1MkndMZ.js} +2 -2
  90. package/.output/public/_nuxt/{BLwDhlaa.js → D37gODe0.js} +1 -1
  91. package/.output/public/_nuxt/{NXY37IO62.js → D6FhDrYe2.js} +1 -1
  92. package/.output/public/_nuxt/{Btx8wL4-.js → D7TZLu4F.js} +1 -1
  93. package/.output/public/_nuxt/{qoUdVDnC.js → D7tEwf-o.js} +3 -3
  94. package/.output/public/_nuxt/D8HQPtm62.js +1 -0
  95. package/.output/public/_nuxt/D9O4L4jK.js +1 -0
  96. package/.output/public/_nuxt/{aQ1B7BZa2.js → D9lL3fJM2.js} +2 -2
  97. package/.output/public/_nuxt/{CT-vTjcG2.js → DC-2eKo62.js} +1 -1
  98. package/.output/public/_nuxt/DF9ETYJ32.js +1 -0
  99. package/.output/public/_nuxt/DGGBrc0q2.js +1 -0
  100. package/.output/public/_nuxt/DGu_fna7.js +1 -0
  101. package/.output/public/_nuxt/{BupBjt6B.js → DKOvbitt.js} +1 -1
  102. package/.output/public/_nuxt/{B1PzYsqN.js → DNxudyND.js} +1 -1
  103. package/.output/public/_nuxt/{BfX6_AjY.js → DOT-XQyi.js} +1 -1
  104. package/.output/public/_nuxt/{BsTZnkVK.js → DPPC9Teq.js} +1 -1
  105. package/.output/public/_nuxt/{HxohXQ_r.js → DRskyE7l.js} +1 -1
  106. package/.output/public/_nuxt/{B-U7E_Mc2.js → DW4ZgInh2.js} +1 -1
  107. package/.output/public/_nuxt/{BErG4kzc2.js → DWe6BMlp2.js} +1 -1
  108. package/.output/public/_nuxt/{BH8RvpVy.js → DWy0AjON.js} +1 -1
  109. package/.output/public/_nuxt/{Bc_k6AVA.js → DXgw1dVL.js} +4 -4
  110. package/.output/public/_nuxt/{C3sWJ8SD2.js → DZsKIzKD2.js} +1 -1
  111. package/.output/public/_nuxt/D_59BNP1.js +14 -0
  112. package/.output/public/_nuxt/{BQIO4MkA2.js → D_FZ3KZI2.js} +1 -1
  113. package/.output/public/_nuxt/{n_Njdwii2.js → D__vJGHF2.js} +1 -1
  114. package/.output/public/_nuxt/{C9gErLQc2.js → DaizNGUm2.js} +1 -1
  115. package/.output/public/_nuxt/{C-MY-JQE.js → DdyE0ylS.js} +1 -1
  116. package/.output/public/_nuxt/DhLlTxQh2.js +1 -0
  117. package/.output/public/_nuxt/{CxVhG0Xx.js → DhW7cFOa.js} +1 -1
  118. package/.output/public/_nuxt/{Rt2i6k7C2.js → DhjgWrB62.js} +1 -1
  119. package/.output/public/_nuxt/{KwT4sN_d.js → DiWcX4gj.js} +1 -1
  120. package/.output/public/_nuxt/DiloA8vK.js +1 -0
  121. package/.output/public/_nuxt/{DX-c5laM2.js → DlS-SkQ42.js} +1 -1
  122. package/.output/public/_nuxt/{D_Zspo1y.js → DmHp9yQ3.js} +1 -1
  123. package/.output/public/_nuxt/{dq1HKoGD.js → DoL9u6wu.js} +1 -1
  124. package/.output/public/_nuxt/{CIvMT5Ic.js → DqxBCeDe.js} +1 -1
  125. package/.output/public/_nuxt/{BnNmkGJS2.js → DrlnrdvY2.js} +3 -3
  126. package/.output/public/_nuxt/{BAcjVcku2.js → Dt8TL8_X2.js} +1 -1
  127. package/.output/public/_nuxt/{BtfwbNC0.js → Du7gS8RU.js} +1 -1
  128. package/.output/public/_nuxt/DuUc4bbY2.js +1 -0
  129. package/.output/public/_nuxt/{DPUXbTg9.js → DudoisLM.js} +1 -1
  130. package/.output/public/_nuxt/{Ce5R-ZGf2.js → DwgVlehj2.js} +1 -1
  131. package/.output/public/_nuxt/Dyxf2xZw.js +1 -0
  132. package/.output/public/_nuxt/Dz9C2pTa.js +1 -0
  133. package/.output/public/_nuxt/{BYxG9Hb2.js → EMbqTHfT.js} +1 -1
  134. package/.output/public/_nuxt/{B1SzppY12.js → FsRVXpyF2.js} +1 -1
  135. package/.output/public/_nuxt/{0MLy6ogg2.js → GQrEW8nk2.js} +1 -1
  136. package/.output/public/_nuxt/{Tuz5LcLM.js → IXR1BWP5.js} +1 -1
  137. package/.output/public/_nuxt/{-jpUnM1I2.js → Iub61dX92.js} +1 -1
  138. package/.output/public/_nuxt/{CQgOzpvI.js → JegDslce.js} +2 -2
  139. package/.output/public/_nuxt/{DrF3TWoj.js → KzK37yIr.js} +1 -1
  140. package/.output/public/_nuxt/{Br3MggOL.js → N-CCmCsX.js} +1 -1
  141. package/.output/public/_nuxt/{DHhmq7s_.js → NfvZ5Lzv.js} +1 -1
  142. package/.output/public/_nuxt/{CzX_kaPL.js → POTcePF_.js} +1 -1
  143. package/.output/public/_nuxt/{D7s96J3r2.js → Q-JpBT032.js} +1 -1
  144. package/.output/public/_nuxt/{DzwIZ81f2.js → R1g64DNi2.js} +1 -1
  145. package/.output/public/_nuxt/{JgheoP3e.js → R5Pz7BqB.js} +1 -1
  146. package/.output/public/_nuxt/{yLyz0-Yz.js → SvjzWbn8.js} +1 -1
  147. package/.output/public/_nuxt/{Dd7MZc_Q.js → XqXoaoDs.js} +1 -1
  148. package/.output/public/_nuxt/{B6jtLy6z.js → YAA98rWJ.js} +11 -11
  149. package/.output/public/_nuxt/{HX4_xnak2.js → YLYSczSq2.js} +1 -1
  150. package/.output/public/_nuxt/{BBw9ylUY2.js → YNhAoK-R2.js} +1 -1
  151. package/.output/public/_nuxt/Zkbt8Uk5.js +1 -0
  152. package/.output/public/_nuxt/aml.PalMp-5n.css +1 -0
  153. package/.output/public/_nuxt/{C41CcsiD.js → b7UcqLKi.js} +1 -1
  154. package/.output/public/_nuxt/builds/latest.json +1 -1
  155. package/.output/public/_nuxt/builds/meta/fa0af8b5-3929-428d-a6de-3b5cc6b8248f.json +1 -0
  156. package/.output/public/_nuxt/{DVkFSOZi.js → cKj4vSo5.js} +1 -1
  157. package/.output/public/_nuxt/{r1CpGsFp.js → dHwWyr6b.js} +1 -1
  158. package/.output/public/_nuxt/{DlcA9Gxl.js → eePbiWEh.js} +1 -1
  159. package/.output/public/_nuxt/{cjRzSvAg2.js → eymRov9Y2.js} +1 -1
  160. package/.output/public/_nuxt/{B8cViLJT.js → geMze5qw.js} +1 -1
  161. package/.output/public/_nuxt/{uu1wfdfR2.js → gh-WMxV_2.js} +1 -1
  162. package/.output/public/_nuxt/{Ce6e1mPk2.js → hCN555XP2.js} +1 -1
  163. package/.output/public/_nuxt/{rdUE8Khf.js → hZG5MLjK.js} +3 -3
  164. package/.output/public/_nuxt/{CcX_jP-d.js → hlfahYxK.js} +1 -1
  165. package/.output/public/_nuxt/{cGSl2GZp2.js → ilJHF1nA2.js} +1 -1
  166. package/.output/public/_nuxt/{D6ZcgHPz.js → jDuiDtGb.js} +1 -1
  167. package/.output/public/_nuxt/{DbeNMehP.js → k9b520K-.js} +1 -1
  168. package/.output/public/_nuxt/ontology.B_3Wn907.css +1 -0
  169. package/.output/public/_nuxt/optimizer.CLA8I1sy.css +1 -0
  170. package/.output/public/_nuxt/{DSORcpTJ.js → rDvMijKA.js} +2 -2
  171. package/.output/public/_nuxt/{CAiHhX8P2.js → rF7mggl72.js} +2 -2
  172. package/.output/public/_nuxt/ri9UF8rk.js +2 -0
  173. package/.output/public/_nuxt/{KgnxOsMr.js → toG_qAMH.js} +1 -1
  174. package/.output/public/_nuxt/{KQZmHR_K.js → u3h4pGpm.js} +2 -2
  175. package/.output/public/_nuxt/{dJ7gK7C2.js → uomnHjhM.js} +1 -1
  176. package/.output/public/_nuxt/{BUTg4W_x2.js → v77qozuJ2.js} +1 -1
  177. package/.output/public/_nuxt/{BcEr7tIB.js → v7cV7hJa.js} +1 -1
  178. package/.output/public/_nuxt/{D25dVZ822.js → vkQoYNQR2.js} +2 -2
  179. package/.output/public/_nuxt/{wR_w07322.js → vp3LtnTz2.js} +1 -1
  180. package/.output/public/_nuxt/{Bnc8HELj2.js → we7-sMSo2.js} +1 -1
  181. package/.output/public/_nuxt/{kN3ZzR1-.js → wxISMS1i.js} +1 -1
  182. package/.output/public/_nuxt/{DGrrucbG.js → zy7efYKR.js} +1 -1
  183. package/.output/server/chunks/_/data-export.mjs +5 -5
  184. package/.output/server/chunks/_/data-query.mjs +2 -2
  185. package/.output/server/chunks/_/eda-run.repo.mjs +2 -2
  186. package/.output/server/chunks/_/features.mjs +4 -4
  187. package/.output/server/chunks/_/golden.mjs +2 -2
  188. package/.output/server/chunks/_/index.mjs +1 -1
  189. package/.output/server/chunks/_/mes-console.mjs +1 -1
  190. package/.output/server/chunks/_/nitro.mjs +2149 -1520
  191. package/.output/server/chunks/_/nitro.mjs.map +1 -1
  192. package/.output/server/chunks/_/spc.mjs +1 -1
  193. package/.output/server/chunks/build/TownView-BWMDbosY.mjs +1 -1
  194. package/.output/server/chunks/build/{_wsId_-BNKrrV1H.mjs → _wsId_-BPy-Aj9L.mjs} +3 -3
  195. package/.output/server/chunks/build/{_wsId_-BNKrrV1H.mjs.map → _wsId_-BPy-Aj9L.mjs.map} +1 -1
  196. package/.output/server/chunks/build/{agents-8tV9xL97.mjs → agents-CpNLdI8E.mjs} +6 -6
  197. package/.output/server/chunks/build/{agents-8tV9xL97.mjs.map → agents-CpNLdI8E.mjs.map} +1 -1
  198. package/.output/server/chunks/build/{aml-BNTEDOsl.mjs → aml-DRAFRcGU.mjs} +15 -12
  199. package/.output/server/chunks/build/{aml-BNTEDOsl.mjs.map → aml-DRAFRcGU.mjs.map} +1 -1
  200. package/.output/server/chunks/build/{channel-templates-Iot9Y3vV.mjs → channel-templates-ByHOQQkO.mjs} +2 -2
  201. package/.output/server/chunks/build/{channel-templates-Iot9Y3vV.mjs.map → channel-templates-ByHOQQkO.mjs.map} +1 -1
  202. package/.output/server/chunks/build/daq-CdxcfY_G.mjs +1 -1
  203. package/.output/server/chunks/build/dcw-BlDQtS4q.mjs +1 -1
  204. package/.output/server/chunks/build/{default-CJkOcmrm.mjs → default-CNWS6NUw.mjs} +4 -4
  205. package/.output/server/chunks/build/{default-CJkOcmrm.mjs.map → default-CNWS6NUw.mjs.map} +1 -1
  206. package/.output/server/chunks/build/{dropdown-CjwsxU39.mjs → dropdown-BNwTVGde.mjs} +2 -2
  207. package/.output/server/chunks/build/{dropdown-CjwsxU39.mjs.map → dropdown-BNwTVGde.mjs.map} +1 -1
  208. package/.output/server/chunks/build/{dropdown-C6YH_kSO.mjs → dropdown-Cd-xPhR6.mjs} +2 -2
  209. package/.output/server/chunks/build/{dropdown-C6YH_kSO.mjs.map → dropdown-Cd-xPhR6.mjs.map} +1 -1
  210. package/.output/server/chunks/build/input-number-BNlNDK7H.mjs +1 -1
  211. package/.output/server/chunks/build/{logs-BTfJQ6vQ.mjs → logs-pRb-TMWa.mjs} +3 -3
  212. package/.output/server/chunks/build/{logs-BTfJQ6vQ.mjs.map → logs-pRb-TMWa.mjs.map} +1 -1
  213. package/.output/server/chunks/build/{monitor-DvaR3yo8.mjs → monitor-Cq6hRFeQ.mjs} +6 -6
  214. package/.output/server/chunks/build/{monitor-DvaR3yo8.mjs.map → monitor-Cq6hRFeQ.mjs.map} +1 -1
  215. package/.output/server/chunks/build/{ontology-C3HS5pMo.mjs → ontology-DK0Mf0zT.mjs} +510 -81
  216. package/.output/server/chunks/build/ontology-DK0Mf0zT.mjs.map +1 -0
  217. package/.output/server/chunks/build/{operations-Cl8nVm9D.mjs → operations-SMQrRAcr.mjs} +3 -3
  218. package/.output/server/chunks/build/{operations-Cl8nVm9D.mjs.map → operations-SMQrRAcr.mjs.map} +1 -1
  219. package/.output/server/chunks/build/optimizer-BlWTsM-W.mjs +202 -0
  220. package/.output/server/chunks/build/optimizer-BlWTsM-W.mjs.map +1 -0
  221. package/.output/server/chunks/build/{pagination-KaIvHBzi.mjs → pagination-DTAconUo.mjs} +2 -2
  222. package/.output/server/chunks/build/{pagination-KaIvHBzi.mjs.map → pagination-DTAconUo.mjs.map} +1 -1
  223. package/.output/server/chunks/build/{permissions-CVTfixZj.mjs → permissions-DgXQZSyx.mjs} +6 -6
  224. package/.output/server/chunks/build/{permissions-CVTfixZj.mjs.map → permissions-DgXQZSyx.mjs.map} +1 -1
  225. package/.output/server/chunks/build/{schedules-BLhn2CLn.mjs → schedules-dSnr8url.mjs} +6 -6
  226. package/.output/server/chunks/build/{schedules-BLhn2CLn.mjs.map → schedules-dSnr8url.mjs.map} +1 -1
  227. package/.output/server/chunks/build/{select--XFl7CtY.mjs → select-B3Dsb9yq.mjs} +3 -3
  228. package/.output/server/chunks/build/{select--XFl7CtY.mjs.map → select-B3Dsb9yq.mjs.map} +1 -1
  229. package/.output/server/chunks/build/{settings-DIf_iYdu.mjs → settings-BrIhnS2Z.mjs} +2 -2
  230. package/.output/server/chunks/build/{settings-DIf_iYdu.mjs.map → settings-BrIhnS2Z.mjs.map} +1 -1
  231. package/.output/server/chunks/build/{table-DIu_YCJN.mjs → table-CmVD-cA9.mjs} +4 -4
  232. package/.output/server/chunks/build/{table-DIu_YCJN.mjs.map → table-CmVD-cA9.mjs.map} +1 -1
  233. package/.output/server/chunks/build/{teams-B2J6ouRY.mjs → teams-B1d32eHK.mjs} +4 -4
  234. package/.output/server/chunks/build/{teams-B2J6ouRY.mjs.map → teams-B1d32eHK.mjs.map} +1 -1
  235. package/.output/server/chunks/build/{tokens-DFQGaN2n.mjs → tokens-GYaGJ35Z.mjs} +6 -6
  236. package/.output/server/chunks/build/{tokens-DFQGaN2n.mjs.map → tokens-GYaGJ35Z.mjs.map} +1 -1
  237. package/.output/server/chunks/build/{tools-DWJFnU_t.mjs → tools-s_9U1Djj.mjs} +6 -6
  238. package/.output/server/chunks/build/{tools-DWJFnU_t.mjs.map → tools-s_9U1Djj.mjs.map} +1 -1
  239. package/.output/server/chunks/build/types-D6J7slEa.mjs +1 -1
  240. package/.output/server/chunks/build/useDaqAddNode-D_Rkju0f.mjs +1 -1
  241. package/.output/server/chunks/build/useDaqDetailNode-DeOsDxK5.mjs +1 -1
  242. package/.output/server/chunks/build/useDaqDetailParams-Cm9a9r5G.mjs +1 -1
  243. package/.output/server/chunks/build/useDaqFilters-CctmO03p.mjs +1 -1
  244. package/.output/server/chunks/build/useDaqStream-B9ZBVQrI.mjs +1 -1
  245. package/.output/server/chunks/build/useDaqTemplates-CK37sMfi.mjs +1 -1
  246. package/.output/server/chunks/build/useDcwAddNode-DACVcEHs.mjs +1 -1
  247. package/.output/server/chunks/build/useDcwStream-Dir5ufAU.mjs +1 -1
  248. package/.output/server/chunks/build/{users-BWw0VCr9.mjs → users-DjiVC_tS.mjs} +6 -6
  249. package/.output/server/chunks/build/{users-BWw0VCr9.mjs.map → users-DjiVC_tS.mjs.map} +1 -1
  250. package/.output/server/chunks/routes/api/mcp/workshop.mjs +1 -1
  251. package/.output/server/chunks/routes/api/system/backup/run.post.mjs +2 -2
  252. package/.output/server/chunks/routes/api/workshop/aml/models/_id_.patch.mjs +7 -1
  253. package/.output/server/chunks/routes/api/workshop/aml/models/_id_.patch.mjs.map +1 -1
  254. package/.output/server/chunks/routes/api/workshop/channel-templates/_id/instantiate.post.mjs +1 -1
  255. package/.output/server/chunks/routes/api/workshop/channels.post.mjs +6 -6
  256. package/.output/server/chunks/routes/api/workshop/daq/_id/ingest.post.mjs +2 -2
  257. package/.output/server/chunks/routes/api/workshop/harnesses/_id/providers.get.mjs +1 -1
  258. package/.output/server/chunks/routes/api/workshop/index.mjs +1 -1
  259. package/.output/server/chunks/routes/api/workshop/index.put.mjs +1 -1
  260. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/autofix.mjs +52 -0
  261. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/autofix.mjs.map +1 -0
  262. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/compile.mjs +1 -1
  263. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/evidence.mjs +1 -1
  264. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/publish.mjs +1 -1
  265. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/rules/_ruleId/approval-decision.mjs +1 -1
  266. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/rules/_ruleId/approval.mjs +1 -1
  267. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/rules/_ruleId/transition.mjs +1 -1
  268. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/subgraph.mjs +38 -0
  269. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/subgraph.mjs.map +1 -0
  270. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/validate.mjs +1 -1
  271. package/.output/server/chunks/routes/api/workshop/ontology/export/_ontologyId_.mjs +1 -1
  272. package/.output/server/chunks/routes/api/workshop/ontology/index.mjs +1 -1
  273. package/.output/server/chunks/routes/api/workshop/ontology/scene.mjs +8 -1
  274. package/.output/server/chunks/routes/api/workshop/ontology/scene.mjs.map +1 -1
  275. package/.output/server/chunks/routes/api/workshop/ontology/traces/_ontologyId_.mjs +1 -1
  276. package/.output/server/chunks/routes/api/workshop/ontology/versions/_ontologyId/compare.mjs +1 -1
  277. package/.output/server/chunks/routes/api/workshop/ontology/versions/_ontologyId_.mjs +1 -1
  278. package/.output/server/chunks/routes/api/workshop/optimization/capabilities.get.mjs +1 -1
  279. package/.output/server/chunks/routes/api/workshop/optimization/index.mjs +1 -1
  280. package/.output/server/chunks/routes/api/workshop/optimization/index2.mjs +1 -1
  281. package/.output/server/chunks/routes/api/workshop/optimization/profiles/_id/publish.post.mjs +1 -1
  282. package/.output/server/chunks/routes/api/workshop/optimization/recommendations/_id/crosscheck.post.mjs +1 -1
  283. package/.output/server/chunks/routes/api/workshop/optimization/recommendations/_id/dispatch.post.mjs +1 -1
  284. package/.output/server/chunks/routes/api/workshop/optimization/solve.post.mjs +1 -1
  285. package/.output/server/chunks/routes/api/workshop/plugins/_name/disable.post.mjs +1 -1
  286. package/.output/server/chunks/routes/api/workshop/plugins/_name/enable.post.mjs +1 -1
  287. package/.output/server/chunks/routes/api/workshop/process-model/datasets.post.mjs +1 -1
  288. package/.output/server/chunks/routes/api/workshop/process-model/eligibility.mjs +1 -1
  289. package/.output/server/chunks/routes/api/workshop/process-model/index.mjs +1 -1
  290. package/.output/server/chunks/routes/api/workshop/process-model/specs/_id/publish.post.mjs +1 -1
  291. package/.output/server/chunks/routes/api/workshop/process-model/train.post.mjs +1 -1
  292. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.delete.mjs +1 -1
  293. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.put.mjs +1 -1
  294. package/.output/server/chunks/routes/api/workshop/tools/sync.post.mjs +1 -1
  295. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channel-templates/_tplId_.post.mjs +1 -1
  296. package/.output/server/chunks/routes/renderer.mjs +2 -2
  297. package/.output/server/chunks/virtual/entry.mjs +92 -18
  298. package/.output/server/chunks/virtual/precomputed.mjs +1 -1
  299. package/.output/server/package.json +1 -1
  300. package/README-zh.md +5 -4
  301. package/README.md +6 -5
  302. package/app/components/aml/AmlModelsTable.vue +5 -0
  303. package/app/components/ontology/OntologyGraph.vue +356 -0
  304. package/app/pages/aml/styles.css +1 -0
  305. package/app/pages/ontology/index.vue +318 -35
  306. package/app/pages/ontology/types.ts +42 -0
  307. package/app/pages/optimizer/index.vue +21 -4
  308. package/config.yml +1 -1
  309. package/docs/cli.en.md +2 -2
  310. package/docs/cli.md +2 -2
  311. package/docs/plugins.en.md +1 -1
  312. package/docs/plugins.md +1 -1
  313. package/docs/sdk.en.md +1 -1
  314. package/docs/sdk.md +1 -1
  315. package/i18n/locales/en.ts +26 -0
  316. package/i18n/locales/zh-CN.ts +26 -0
  317. package/mcp/aw-mcp-server.mjs +20 -2
  318. package/package.json +1 -1
  319. package/scripts/e2e-direct-rest-simulator-paper.mjs +624 -0
  320. package/scripts/e2e-idd-results.mjs +177 -0
  321. package/scripts/e2e-model-loop-live.mjs +58 -4
  322. package/scripts/e2e-ontology-live.mjs +138 -3
  323. package/scripts/e2e-ontology.mjs +393 -328
  324. package/scripts/e2e-pi-simulator-paper.mjs +2316 -0
  325. package/scripts/e2e-registered-harness-simulator-paper.mjs +1926 -0
  326. package/scripts/e2e-simulator-optimizer-paper.mjs +264 -0
  327. package/scripts/fixtures/omp-paper-harness.mjs +163 -0
  328. package/sdk/context.mjs +6 -0
  329. package/sdk/index.d.mts +2 -0
  330. package/server/api/workshop/aml/models/[id].patch.ts +36 -30
  331. package/server/api/workshop/ontology/drafts/[draftId]/autofix.ts +31 -0
  332. package/server/api/workshop/ontology/drafts/[draftId]/subgraph.ts +24 -0
  333. package/server/api/workshop/ontology/scene.ts +14 -1
  334. package/server/plugins-builtin/diag-bridge/client.mjs +390 -239
  335. package/server/plugins-builtin/diag-bridge/host/helpers.mjs +80 -0
  336. package/server/plugins-builtin/diag-bridge/host/plugin.mjs +264 -2
  337. package/server/plugins-builtin/diag-bridge/i18n.json +84 -4
  338. package/server/services/workshop/agents/adapters/omp-rpc-client/frames.ts +129 -111
  339. package/server/services/workshop/agents/host-tool-bridge/tools/industrial.ts +6 -3
  340. package/server/services/workshop/agents/industrial/aml-job-tools.ts +602 -569
  341. package/server/services/workshop/agents/industrial/grant-guard.ts +15 -1
  342. package/server/services/workshop/agents/industrial/index.ts +2 -2
  343. package/server/services/workshop/agents/industrial/ontology-tools.ts +66 -6
  344. package/server/services/workshop/agents/industrial/ops-tools.ts +54 -16
  345. package/server/services/workshop/agents/industrial/optimizer-tools.ts +2 -0
  346. package/server/services/workshop/agents/industrial/recipe-gate.ts +19 -6
  347. package/server/services/workshop/agents/industrial/recipe-propose-tools.ts +1 -1
  348. package/server/services/workshop/agents/omp-agent/supervision-history.ts +38 -0
  349. package/server/services/workshop/agents/omp-agent/tools-steer.ts +18 -1
  350. package/server/services/workshop/aml/aml.repo.ts +16 -0
  351. package/server/services/workshop/daq/bus/index.ts +12 -5
  352. package/server/services/workshop/db/database/open.ts +97 -97
  353. package/server/services/workshop/db/database/schema.ts +1 -0
  354. package/server/services/workshop/ontology/autofix.ts +198 -0
  355. package/server/services/workshop/ontology/contracts.ts +3 -1
  356. package/server/services/workshop/ontology/index.ts +2 -0
  357. package/server/services/workshop/ontology/ontology.service.ts +46 -0
  358. package/server/services/workshop/ontology/subgraph.core.ts +300 -0
  359. package/server/services/workshop/ontology/subgraph.service.ts +113 -0
  360. package/server/services/workshop/optimization/contracts.ts +2 -0
  361. package/server/services/workshop/optimization/profile-adopt.service.ts +5 -0
  362. package/server/services/workshop/optimization/profile.repo.ts +6 -4
  363. package/.output/public/_nuxt/B3Y5bCrM.js +0 -1
  364. package/.output/public/_nuxt/B8N8nsad2.js +0 -2
  365. package/.output/public/_nuxt/BO0BJx3w2.js +0 -8
  366. package/.output/public/_nuxt/BWn-lfCp2.js +0 -1
  367. package/.output/public/_nuxt/Bcs9zzO62.js +0 -1
  368. package/.output/public/_nuxt/BwO2Y5FH2.js +0 -1
  369. package/.output/public/_nuxt/Byf4IxU2.js +0 -14
  370. package/.output/public/_nuxt/C-LU6xv_.js +0 -1
  371. package/.output/public/_nuxt/CJ0bjZ6v2.js +0 -1
  372. package/.output/public/_nuxt/CJ3Vul2u.js +0 -1
  373. package/.output/public/_nuxt/CNwx04ln.js +0 -84
  374. package/.output/public/_nuxt/CVCscYzb2.js +0 -1
  375. package/.output/public/_nuxt/C_A0MCol2.js +0 -1
  376. package/.output/public/_nuxt/CnP6snIz.js +0 -3
  377. package/.output/public/_nuxt/D0mzKkZr.js +0 -1
  378. package/.output/public/_nuxt/D3buuIkE.js +0 -1
  379. package/.output/public/_nuxt/D4_INWgq.js +0 -1
  380. package/.output/public/_nuxt/D5kCimyw2.js +0 -1
  381. package/.output/public/_nuxt/DBtXLkyA.js +0 -1
  382. package/.output/public/_nuxt/DHURbGkn2.js +0 -1
  383. package/.output/public/_nuxt/DaBzS-iu.js +0 -1
  384. package/.output/public/_nuxt/DnlhV7Xe.js +0 -1
  385. package/.output/public/_nuxt/GtI6PUI32.js +0 -1
  386. package/.output/public/_nuxt/Nw_6OpQZ.js +0 -1
  387. package/.output/public/_nuxt/Y4sMSPrS2.js +0 -1
  388. package/.output/public/_nuxt/aml.CeLxRzvI.css +0 -1
  389. package/.output/public/_nuxt/builds/meta/7a79a7e4-d691-4cf5-ae3a-3b01814479fb.json +0 -1
  390. package/.output/public/_nuxt/goF_oZHF.js +0 -2
  391. package/.output/public/_nuxt/ontology.QMGeh66l.css +0 -1
  392. package/.output/public/_nuxt/optimizer.B8gCbU1b.css +0 -1
  393. package/.output/public/_nuxt/rJ7To74v2.js +0 -1
  394. package/.output/server/chunks/build/ontology-C3HS5pMo.mjs.map +0 -1
  395. package/.output/server/chunks/build/optimizer-BOtGWEtc.mjs +0 -200
  396. package/.output/server/chunks/build/optimizer-BOtGWEtc.mjs.map +0 -1
@@ -1,97 +1,97 @@
1
- /**
2
- * 打开/初始化数据库(PRAGMA、建表、种子、sqlite-vec)
3
- * (由 server/services/workshop/db/database.ts 按职责拆出;内容逐行原文搬运)
4
- */
5
- import type * as sqliteVec from 'sqlite-vec'
6
- import { DatabaseSync } from 'node:sqlite'
7
- import { SCHEMA_SQL } from './schema'
8
- import { createRequire } from 'node:module'
9
- import { migrateAddColumn, migrateAgentTeamExecutionLeaseColumns, migrateAgentTeamTaskGuardrailColumns, migrateAgentTeamTaskGuardrails, migrateAgentTeamTaskQueueColumns, migrateAmlChannelOptimizationColumns, migrateAmlModelIdentityColumns, migrateAnalysisEditColumns, migrateApprovalPayloadColumns, migrateAuditQueryIndexes, migrateAuditScopeColumn, migrateDropOwnerFks, migrateDualDriveColumns, migrateGroupChatV17, migrateLegacySchema, migrateMissingForeignKeys, migrateAmlTwinProviderColumns, migrateOptimizerFoundationColumns, migrateAgentTokenGraceColumns } from './migrations'
10
- import { seedDefaultWorkshopData } from './seed'
11
-
12
- export const require = createRequire(import.meta.url)
13
- export function openWorkshopDb(path: string): DatabaseSync {
14
- // allowExtension + 尝试加载 sqlite-vec(向量检索);失败静默降级纯 FTS(受控环境可能禁扩展)
15
- const db = new DatabaseSync(path, { allowExtension: true })
16
- // busy_timeout:retention/backup 等第二连接持写锁时,主连接等待而非立即 SQLITE_BUSY
17
- db.exec('PRAGMA busy_timeout = 5000')
18
- try {
19
- const { getLoadablePath } = require('sqlite-vec') as typeof sqliteVec
20
- db.loadExtension(getLoadablePath())
21
- }
22
- catch {
23
- // 扩展不可用:记忆系统自动退化为 FTS-only(vecInit 将失败并禁用向量)
24
- }
25
- initWorkshopDb(db)
26
- return db
27
- }
28
-
29
- /** 对已打开的库执行初始化:WAL + 外键约束 + 建表 + 增量迁移 */
30
- export function initWorkshopDb(db: DatabaseSync): void {
31
- db.exec('PRAGMA journal_mode = WAL;')
32
- // S6:synchronous=NORMAL(WAL 推荐档)——与 TSDB 仿真库对齐;断电最多丢最后一个事务,不损坏库
33
- db.exec('PRAGMA synchronous = NORMAL;')
34
- db.exec('PRAGMA foreign_keys = ON;')
35
- db.exec(SCHEMA_SQL)
36
- // Add guardrail metadata before any legacy tasks-table rebuild so values can be copied safely.
37
- migrateAgentTeamTaskGuardrailColumns(db)
38
- migrateAgentTeamTaskQueueColumns(db)
39
- migrateLegacySchema(db)
40
- migrateAddColumn(db, 'channels', 'scenario_prompt', 'TEXT NOT NULL DEFAULT \'\'')
41
- // v11:channel 级默认 LLM(四引擎统一注入面;成员 config 显式指定时优先)
42
- migrateAddColumn(db, 'channels', 'llm_json', 'TEXT NOT NULL DEFAULT \'\'')
43
- // 派发路由理由(koda RouteDecision 借鉴):lead 派发留痕"为什么派给他",供审计与前端呈现
44
- migrateAddColumn(db, 'tasks', 'route_reason', 'TEXT NOT NULL DEFAULT \'\'')
45
- // v10:模板可见性列(既有库补列;默认 private,仅属主可见)
46
- migrateAddColumn(db, 'agents', 'visibility', 'TEXT NOT NULL DEFAULT \'private\'')
47
- migrateAddColumn(db, 'teams', 'visibility', 'TEXT NOT NULL DEFAULT \'private\'')
48
- // 回填:内置/遗留公共模板(owner NULL)强制 public —— 升级后保持全员可读可用
49
- db.exec('UPDATE agents SET visibility = \'public\' WHERE owner_user_id IS NULL')
50
- db.exec('UPDATE teams SET visibility = \'public\' WHERE owner_user_id IS NULL')
51
- // 运维日志(OpsLog)维度列:既有库补列(新库由上方 DDL 直建)
52
- migrateAddColumn(db, 'audit_log', 'line_id', 'TEXT NOT NULL DEFAULT \'\'')
53
- migrateAddColumn(db, 'audit_log', 'product_id', 'TEXT NOT NULL DEFAULT \'\'')
54
- migrateAddColumn(db, 'audit_log', 'recipe_id', 'TEXT NOT NULL DEFAULT \'\'')
55
- migrateAddColumn(db, 'audit_log', 'kind', 'TEXT NOT NULL DEFAULT \'\'')
56
- migrateAddColumn(db, 'audit_log', 'summary', 'TEXT NOT NULL DEFAULT \'\'')
57
- // 2026-10-08 写控 ACK 鉴定:严重级列(info/warn/error;既有库补列,历史行按 info 语义)
58
- migrateAddColumn(db, 'audit_log', 'level', 'TEXT NOT NULL DEFAULT \'info\'')
59
- // 2026-10-19 产线日志显式域标识(scope=line|system;老库按 line_id 回填并强制不变量)
60
- migrateAuditScopeColumn(db)
61
- // 2026-10-19 产线日志查询索引(必须在补列之后:老库缺列时建索引会中断初始化)
62
- migrateAuditQueryIndexes(db)
63
- migrateMissingForeignKeys(db)
64
- // Run after legacy task-table rebuilds so guardrail metadata and its index survive upgrades.
65
- migrateAgentTeamTaskQueueColumns(db)
66
- migrateAgentTeamExecutionLeaseColumns(db)
67
- migrateAgentTeamTaskGuardrails(db)
68
- migrateDropOwnerFks(db)
69
- migrateGroupChatV17(db)
70
- migrateAmlTwinProviderColumns(db)
71
- migrateAmlModelIdentityColumns(db)
72
- migrateAmlChannelOptimizationColumns(db)
73
- // 产线 Co-Pilot P2:审批历史结构化载荷列(payload_json/choice;既有库补列,新库 DDL 已含)
74
- migrateApprovalPayloadColumns(db)
75
- // v27:数据分析报告人工修订列(updated_*;既有库补列,新库 DDL 已含)
76
- migrateAnalysisEditColumns(db)
77
- // v29:Optimizer/Process Model 地基列(工件类型判别、谱系引用、legacy 标记)
78
- migrateOptimizerFoundationColumns(db)
79
- // v30:双驱动收敛列(下发状态机/谱系/多工况 hash/资格谱系;总计划 SW2–SW5)
80
- migrateDualDriveColumns(db)
81
- // v31(WP3):agent token 轮换宽限列(prev_token/prev_token_until;既有库补列)
82
- migrateAgentTokenGraceColumns(db)
83
- // v32(ONT):Profile 冻结本体引用摘要(缺省 [] = 无本体约束域;只前滚,不回填)
84
- migrateAddColumn(db, 'optimizer_profiles', 'ontology_refs_json', 'TEXT NOT NULL DEFAULT \'[]\'')
85
- seedDefaultWorkshopData(db)
86
- }
87
-
88
- /**
89
- * v17 迁移:群聊/成员/HITL 相关列与不变量回填。
90
- *
91
- * 规则(主计划 §3.1 / §13.7):
92
- * - 既有 owner 非 NULL 的 Channel 一律 private + owner_approve + owner_only + chat_enabled=0,
93
- * 即**默认不改变任何既有可见性/权限行为**。
94
- * - owner 为 NULL 的遗留 Channel 同样保持 private + chat_enabled=0:不能被自动变成公开群聊;
95
- * 必须由 admin 显式认领(写 owner_user_id)后再由 owner 开启群聊。
96
- * - 每个 owner 非 NULL 的 Channel 必须恰好一条 active owner 成员记录(缺失则补写)。
97
- */
1
+ /**
2
+ * 打开/初始化数据库(PRAGMA、建表、种子、sqlite-vec)
3
+ * (由 server/services/workshop/db/database.ts 按职责拆出;内容逐行原文搬运)
4
+ */
5
+ import type * as sqliteVec from 'sqlite-vec'
6
+ import { DatabaseSync } from 'node:sqlite'
7
+ import { SCHEMA_SQL } from './schema'
8
+ import { createRequire } from 'node:module'
9
+ import { migrateAddColumn, migrateAgentTeamExecutionLeaseColumns, migrateAgentTeamTaskGuardrailColumns, migrateAgentTeamTaskGuardrails, migrateAgentTeamTaskQueueColumns, migrateAmlChannelOptimizationColumns, migrateAmlModelIdentityColumns, migrateAnalysisEditColumns, migrateApprovalPayloadColumns, migrateAuditQueryIndexes, migrateAuditScopeColumn, migrateDropOwnerFks, migrateDualDriveColumns, migrateGroupChatV17, migrateLegacySchema, migrateMissingForeignKeys, migrateAmlTwinProviderColumns, migrateOptimizerFoundationColumns, migrateAgentTokenGraceColumns } from './migrations'
10
+ import { seedDefaultWorkshopData } from './seed'
11
+
12
+ export const require = createRequire(import.meta.url)
13
+ export function openWorkshopDb(path: string): DatabaseSync {
14
+ // allowExtension + 尝试加载 sqlite-vec(向量检索);失败静默降级纯 FTS(受控环境可能禁扩展)
15
+ const db = new DatabaseSync(path, { allowExtension: true })
16
+ // busy_timeout:retention/backup 等第二连接持写锁时,主连接等待而非立即 SQLITE_BUSY
17
+ db.exec('PRAGMA busy_timeout = 5000')
18
+ try {
19
+ const { getLoadablePath } = require('sqlite-vec') as typeof sqliteVec
20
+ db.loadExtension(getLoadablePath())
21
+ }
22
+ catch {
23
+ // 扩展不可用:记忆系统自动退化为 FTS-only(vecInit 将失败并禁用向量)
24
+ }
25
+ initWorkshopDb(db)
26
+ return db
27
+ }
28
+
29
+ /** 对已打开的库执行初始化:WAL + 外键约束 + 建表 + 增量迁移 */
30
+ export function initWorkshopDb(db: DatabaseSync): void {
31
+ db.exec('PRAGMA journal_mode = WAL;')
32
+ // S6:synchronous=NORMAL(WAL 推荐档)——与 TSDB 仿真库对齐;断电最多丢最后一个事务,不损坏库
33
+ db.exec('PRAGMA synchronous = NORMAL;')
34
+ db.exec('PRAGMA foreign_keys = ON;')
35
+ db.exec(SCHEMA_SQL)
36
+ // Add guardrail metadata before any legacy tasks-table rebuild so values can be copied safely.
37
+ migrateAgentTeamTaskGuardrailColumns(db)
38
+ migrateAgentTeamTaskQueueColumns(db)
39
+ migrateLegacySchema(db)
40
+ migrateAddColumn(db, 'channels', 'scenario_prompt', 'TEXT NOT NULL DEFAULT \'\'')
41
+ // v11:channel 级默认 LLM(四引擎统一注入面;成员 config 显式指定时优先)
42
+ migrateAddColumn(db, 'channels', 'llm_json', 'TEXT NOT NULL DEFAULT \'\'')
43
+ // 派发路由理由(koda RouteDecision 借鉴):lead 派发留痕"为什么派给他",供审计与前端呈现
44
+ migrateAddColumn(db, 'tasks', 'route_reason', 'TEXT NOT NULL DEFAULT \'\'')
45
+ // v10:模板可见性列(既有库补列;默认 private,仅属主可见)
46
+ migrateAddColumn(db, 'agents', 'visibility', 'TEXT NOT NULL DEFAULT \'private\'')
47
+ migrateAddColumn(db, 'teams', 'visibility', 'TEXT NOT NULL DEFAULT \'private\'')
48
+ // 回填:内置/遗留公共模板(owner NULL)强制 public —— 升级后保持全员可读可用
49
+ db.exec('UPDATE agents SET visibility = \'public\' WHERE owner_user_id IS NULL')
50
+ db.exec('UPDATE teams SET visibility = \'public\' WHERE owner_user_id IS NULL')
51
+ // 运维日志(OpsLog)维度列:既有库补列(新库由上方 DDL 直建)
52
+ migrateAddColumn(db, 'audit_log', 'line_id', 'TEXT NOT NULL DEFAULT \'\'')
53
+ migrateAddColumn(db, 'audit_log', 'product_id', 'TEXT NOT NULL DEFAULT \'\'')
54
+ migrateAddColumn(db, 'audit_log', 'recipe_id', 'TEXT NOT NULL DEFAULT \'\'')
55
+ migrateAddColumn(db, 'audit_log', 'kind', 'TEXT NOT NULL DEFAULT \'\'')
56
+ migrateAddColumn(db, 'audit_log', 'summary', 'TEXT NOT NULL DEFAULT \'\'')
57
+ // 2026-10-08 写控 ACK 鉴定:严重级列(info/warn/error;既有库补列,历史行按 info 语义)
58
+ migrateAddColumn(db, 'audit_log', 'level', 'TEXT NOT NULL DEFAULT \'info\'')
59
+ // 2026-10-19 产线日志显式域标识(scope=line|system;老库按 line_id 回填并强制不变量)
60
+ migrateAuditScopeColumn(db)
61
+ // 2026-10-19 产线日志查询索引(必须在补列之后:老库缺列时建索引会中断初始化)
62
+ migrateAuditQueryIndexes(db)
63
+ migrateMissingForeignKeys(db)
64
+ // Run after legacy task-table rebuilds so guardrail metadata and its index survive upgrades.
65
+ migrateAgentTeamTaskQueueColumns(db)
66
+ migrateAgentTeamExecutionLeaseColumns(db)
67
+ migrateAgentTeamTaskGuardrails(db)
68
+ migrateDropOwnerFks(db)
69
+ migrateGroupChatV17(db)
70
+ migrateAmlTwinProviderColumns(db)
71
+ migrateAmlModelIdentityColumns(db)
72
+ migrateAmlChannelOptimizationColumns(db)
73
+ // 产线 Co-Pilot P2:审批历史结构化载荷列(payload_json/choice;既有库补列,新库 DDL 已含)
74
+ migrateApprovalPayloadColumns(db)
75
+ // v27:数据分析报告人工修订列(updated_*;既有库补列,新库 DDL 已含)
76
+ migrateAnalysisEditColumns(db)
77
+ // v29:Optimizer/Process Model 地基列(工件类型判别、谱系引用、legacy 标记)
78
+ migrateOptimizerFoundationColumns(db)
79
+ // v30:双驱动收敛列(下发状态机/谱系/多工况 hash/资格谱系;总计划 SW2–SW5)
80
+ migrateDualDriveColumns(db)
81
+ // v31(WP3):agent token 轮换宽限列(prev_token/prev_token_until;既有库补列)
82
+ migrateAgentTokenGraceColumns(db)
83
+ // v32(ONT):Profile 冻结本体引用摘要(缺省 [] = 无本体约束域;只前滚,不回填)
84
+ migrateAddColumn(db, 'optimizer_profiles', 'ontology_refs_json', 'TEXT NOT NULL DEFAULT \'[]\'')
85
+ seedDefaultWorkshopData(db)
86
+ }
87
+
88
+ /**
89
+ * v17 迁移:群聊/成员/HITL 相关列与不变量回填。
90
+ *
91
+ * 规则(主计划 §3.1 / §13.7):
92
+ * - 既有 owner 非 NULL 的 Channel 一律 private + owner_approve + owner_only + chat_enabled=0,
93
+ * 即**默认不改变任何既有可见性/权限行为**。
94
+ * - owner 为 NULL 的遗留 Channel 同样保持 private + chat_enabled=0:不能被自动变成公开群聊;
95
+ * 必须由 admin 显式认领(写 owner_user_id)后再由 owner 开启群聊。
96
+ * - 每个 owner 非 NULL 的 Channel 必须恰好一条 active owner 成员记录(缺失则补写)。
97
+ */
@@ -896,6 +896,7 @@ CREATE TABLE IF NOT EXISTS optimizer_profiles (
896
896
  id TEXT NOT NULL,
897
897
  version INTEGER NOT NULL DEFAULT 1,
898
898
  name TEXT NOT NULL DEFAULT '',
899
+ description TEXT NOT NULL DEFAULT '',
899
900
  model_ref TEXT NOT NULL,
900
901
  model_artifact_hash TEXT NOT NULL DEFAULT '',
901
902
  model_artifact_kind TEXT NOT NULL DEFAULT '',
@@ -0,0 +1,198 @@
1
+ /**
2
+ * 本体草稿自动修复 —— 只做「安全、确定、幂等」的规范化,绝不伪造证据。
3
+ *
4
+ * 可自动修复(修复后有 fix 记录):
5
+ * 1. DOC_DESCRIPTION / ENTITY_DESCRIPTION / RULE_DESCRIPTION:补人读描述,
6
+ * 让 Agent 与用户一眼看出这个模型代表什么;
7
+ * 2. ENTITY_DIMENSION:量纲跟随单位(复合/未知单位不强行声明量纲,避免误配);
8
+ * 3. SCOPE_LINE:B 规则/绑定作用域回填文档产线;
9
+ * 4. BINDING_UNIT / BINDING_SCALE:绑定声明单位回填实体单位;scale=0 归一为 1;
10
+ * 5. ORPHAN_RELATION / ORPHAN_BINDING:悬空引用(实体不存在)确定性移除;
11
+ * 6. DUPLICATE_ID:完全重复的项去重;同 id 不同内容追加 `-dupN` 后缀保留两份;
12
+ * 7. RULE_STATUS_DOWNGRADE:证据未达 validated_control 的硬约束(bound/rate/nonlinear)
13
+ * 不允许停在 approved_for_control —— 回退到 validated(证据不可自动伪造)。
14
+ *
15
+ * 不作为自动修复(仍需人/Agent 补真实信息,由 validator 报告):
16
+ * - 证据缺失/级别不足(需真实数据或专家记录);
17
+ * - 未知实体引用之外的语义冲突(RULE_CONFLICT);
18
+ * - 平台侧绑定漂移(节点/配方不存在、单位与真实对象不符)。
19
+ */
20
+ import { dimensionOf } from '@/shared/dimensions'
21
+ import { validateDraftDoc } from './validator'
22
+ import type { OntologyDraftDoc, OntologyEntity, OntologyRule } from './contracts'
23
+
24
+ export interface OntologyAutoFix {
25
+ code: string
26
+ path: string
27
+ message: string
28
+ }
29
+
30
+ export interface AutoFixOutcome {
31
+ doc: OntologyDraftDoc
32
+ fixes: OntologyAutoFix[]
33
+ /** 修复后的校验结论(便于调用方一次看清还剩什么) */
34
+ validation: ReturnType<typeof validateDraftDoc>
35
+ }
36
+
37
+ const EVIDENCE_RANK: Record<string, number> = {
38
+ candidate_influence: 0,
39
+ observed_correlation: 1,
40
+ validated_control: 2,
41
+ }
42
+
43
+ const CONTROL_HARD_KINDS = new Set(['bound', 'rate', 'nonlinear'])
44
+
45
+ function bestEvidenceLevel(rule: OntologyRule): string {
46
+ return rule.evidence.reduce((best, item) => (
47
+ (EVIDENCE_RANK[item.level] ?? 0) > (EVIDENCE_RANK[best] ?? 0) ? item.level : best
48
+ ), 'candidate_influence')
49
+ }
50
+
51
+ function ruleDescription(rule: OntologyRule): string {
52
+ const dsl = rule.dsl
53
+ switch (dsl.type) {
54
+ case 'bound': {
55
+ const range = [dsl.min != null ? `≥${dsl.min}` : '', dsl.max != null ? `≤${dsl.max}` : ''].filter(Boolean).join(' 且 ')
56
+ return `${dsl.variableKey} 界限${range ? `(${range}${dsl.unit ? ` ${dsl.unit}` : ''})` : ''}`
57
+ }
58
+ case 'rate':
59
+ return `${dsl.variableKey} 变化率上限 ${dsl.maxStep}${dsl.unit ? ` ${dsl.unit}` : ''}/步`
60
+ case 'state_condition':
61
+ return dsl.message?.trim() || `当 ${dsl.when.variableKey} ${dsl.when.op} ${dsl.when.value} 时禁止 ${dsl.forbid.variableKey} 增量`
62
+ case 'interlock':
63
+ return dsl.text
64
+ case 'linear_coupling':
65
+ return `${dsl.variableKey} 线性耦合于 ${dsl.ofKey}`
66
+ case 'nonlinear':
67
+ return `${dsl.variableKey} 非线性约束:${dsl.expression}`
68
+ default:
69
+ return dsl.text
70
+ }
71
+ }
72
+
73
+ function entityDimension(entity: OntologyEntity): string {
74
+ const computed = dimensionOf(entity.unit)
75
+ // 复合/未知单位自成一域(如 mm/s),不强行声明量纲 —— 留空表示「不主张相容性」
76
+ if (computed.startsWith('compound:') || computed.startsWith('unit:')) return ''
77
+ return computed
78
+ }
79
+
80
+ function scopeLineOf(doc: OntologyDraftDoc): string {
81
+ return String(doc.lineId ?? '').trim()
82
+ }
83
+
84
+ /** 修复本体草稿(纯函数;返回新对象,不修改入参) */
85
+ export function autoFixDraftDoc(input: OntologyDraftDoc): AutoFixOutcome {
86
+ const doc: OntologyDraftDoc = JSON.parse(JSON.stringify(input)) as OntologyDraftDoc
87
+ const fixes: OntologyAutoFix[] = []
88
+ const lineId = scopeLineOf(doc)
89
+
90
+ // ── 1. 文档描述 ──
91
+ if (!String(doc.description ?? '').trim()) {
92
+ doc.description = `${doc.name}${lineId ? `(产线 ${lineId})` : '(全局本体)'} —— 实体 ${doc.entities.length} / 关系 ${doc.relations.length} / 规则 ${doc.rules.length} / 绑定 ${doc.bindings.length}`
93
+ fixes.push({ code: 'DOC_DESCRIPTION', path: 'description', message: '补写文档描述(供 Agent 与用户理解模型含义)' })
94
+ }
95
+
96
+ // ── 2. 实体:描述 + 量纲 ──
97
+ doc.entities = doc.entities.map((entity, index) => {
98
+ const next = { ...entity }
99
+ if (!String(next.description ?? '').trim()) {
100
+ next.description = next.name
101
+ fixes.push({ code: 'ENTITY_DESCRIPTION', path: `entities[${index}]`, message: `实体「${next.key}」补描述为名称` })
102
+ }
103
+ const dimension = entityDimension(next)
104
+ if ((next.dimension ?? '') !== dimension) {
105
+ fixes.push({ code: 'ENTITY_DIMENSION', path: `entities[${entity.key}]`, message: `量纲「${next.dimension || '空'}」→「${dimension || '空'}」(跟随单位 ${next.unit || '无量纲'})` })
106
+ next.dimension = dimension
107
+ }
108
+ return next
109
+ })
110
+ const entityKeys = new Set(doc.entities.map(e => e.key))
111
+ const entityByKey = new Map(doc.entities.map(e => [e.key, e]))
112
+
113
+ // ── 3. 关系:悬空引用移除 + 去重 ──
114
+ const relationIds = new Map<string, number>()
115
+ doc.relations = doc.relations.filter((relation, index) => {
116
+ if (!entityKeys.has(relation.srcKey) || !entityKeys.has(relation.dstKey)) {
117
+ fixes.push({ code: 'ORPHAN_RELATION', path: `relations[${index}]`, message: `关系「${relation.id}」引用不存在的实体,已移除` })
118
+ return false
119
+ }
120
+ const seen = relationIds.get(relation.id)
121
+ if (seen != null) {
122
+ const first = doc.relations[seen]
123
+ if (JSON.stringify(first) === JSON.stringify(relation)) {
124
+ fixes.push({ code: 'DUPLICATE_ID', path: `relations[${index}]`, message: `关系「${relation.id}」完全重复,已去重` })
125
+ return false
126
+ }
127
+ relation.id = `${relation.id}-dup${index}`
128
+ fixes.push({ code: 'DUPLICATE_ID', path: `relations[${index}]`, message: `关系 id 冲突,已改为「${relation.id}」保留两份` })
129
+ }
130
+ relationIds.set(relation.id, index)
131
+ return true
132
+ })
133
+
134
+ // ── 4. 规则:描述/作用域/状态回退 ──
135
+ doc.rules = doc.rules.map((rule, index) => {
136
+ const next = { ...rule, scope: { ...rule.scope } }
137
+ if (!String(next.description ?? '').trim()) {
138
+ next.description = ruleDescription(next)
139
+ fixes.push({ code: 'RULE_DESCRIPTION', path: `rules[${index}]`, message: `规则「${next.id}」补描述` })
140
+ }
141
+ if (lineId && !String(next.scope.lineId ?? '').trim()) {
142
+ next.scope.lineId = lineId
143
+ fixes.push({ code: 'SCOPE_LINE', path: `rules[${index}]`, message: `规则「${next.id}」作用域回填产线 ${lineId}` })
144
+ }
145
+ if (next.status === 'approved_for_control' && CONTROL_HARD_KINDS.has(`${next.kind}`)) {
146
+ const level = bestEvidenceLevel(next)
147
+ if ((EVIDENCE_RANK[level] ?? 0) < (EVIDENCE_RANK.validated_control ?? 2)) {
148
+ next.status = 'validated'
149
+ fixes.push({ code: 'RULE_STATUS_DOWNGRADE', path: `rules[${index}]`, message: `规则「${next.id}」证据级别 ${level} 不足控制级,状态回退为 validated(证据不可自动伪造)` })
150
+ }
151
+ }
152
+ return next
153
+ })
154
+
155
+ // ── 5. 绑定:悬空移除 / 单位回填 / scale 归一 / 作用域 ──
156
+ const bindingIds = new Map<string, number>()
157
+ doc.bindings = doc.bindings.filter((binding, index) => {
158
+ if (!entityKeys.has(binding.entityKey)) {
159
+ fixes.push({ code: 'ORPHAN_BINDING', path: `bindings[${index}]`, message: `绑定「${binding.id}」引用的实体不存在,已移除` })
160
+ return false
161
+ }
162
+ const seen = bindingIds.get(binding.id)
163
+ if (seen != null) {
164
+ const first = doc.bindings[seen]
165
+ if (JSON.stringify(first) === JSON.stringify(binding)) {
166
+ fixes.push({ code: 'DUPLICATE_ID', path: `bindings[${index}]`, message: `绑定「${binding.id}」完全重复,已去重` })
167
+ return false
168
+ }
169
+ binding.id = `${binding.id}-dup${index}`
170
+ fixes.push({ code: 'DUPLICATE_ID', path: `bindings[${index}]`, message: `绑定 id 冲突,已改为「${binding.id}」保留两份` })
171
+ }
172
+ bindingIds.set(binding.id, index)
173
+ return true
174
+ }).map((binding, index) => {
175
+ const next = { ...binding }
176
+ const entity = entityByKey.get(next.entityKey)
177
+ const unit = String(entity?.unit ?? '').trim()
178
+ if (unit && !String(next.unitDeclared ?? '').trim()) {
179
+ next.unitDeclared = unit
180
+ fixes.push({ code: 'BINDING_UNIT', path: `bindings[${index}]`, message: `绑定「${next.id}」声明单位回填 ${unit}` })
181
+ }
182
+ if (unit && !String(next.unitTarget ?? '').trim()) {
183
+ next.unitTarget = unit
184
+ fixes.push({ code: 'BINDING_UNIT', path: `bindings[${index}]`, message: `绑定「${next.id}」目标单位回填 ${unit}` })
185
+ }
186
+ if (!Number.isFinite(next.scale) || next.scale === 0) {
187
+ next.scale = 1
188
+ fixes.push({ code: 'BINDING_SCALE', path: `bindings[${index}]`, message: `绑定「${next.id}」scale 非法,归一为 1` })
189
+ }
190
+ if (lineId && (!String(next.scope ?? '').trim() || String(next.scope).trim() === 'global')) {
191
+ next.scope = `line:${lineId}`
192
+ fixes.push({ code: 'SCOPE_LINE', path: `bindings[${index}]`, message: `绑定「${next.id}」作用域回填 line:${lineId}` })
193
+ }
194
+ return next
195
+ })
196
+
197
+ return { doc, fixes, validation: validateDraftDoc(doc) }
198
+ }
@@ -252,6 +252,8 @@ export type BindingDraft = z.infer<typeof bindingDraftSchema>
252
252
  export const ontologyDraftDocSchema = z.object({
253
253
  schemaVersion: z.literal(ONTOLOGY_SCHEMA_VERSION),
254
254
  name: z.string().min(1).max(200),
255
+ /** 人读描述:这个本体代表哪段工况、约束什么(Agent 可写,autofix 会补默认值) */
256
+ description: z.string().max(2000).default(''),
255
257
  /** 授权锚;空 = 全局本体(仅 admin 可发布) */
256
258
  lineId: z.string().max(120).default(''),
257
259
  entities: z.array(ontologyEntitySchema).default([]),
@@ -263,7 +265,7 @@ export const ontologyDraftDocSchema = z.object({
263
265
  export type OntologyDraftDoc = z.infer<typeof ontologyDraftDocSchema>
264
266
 
265
267
  export function emptyDraftDoc(ontologyId: string, lineId = ''): OntologyDraftDoc {
266
- return { schemaVersion: ONTOLOGY_SCHEMA_VERSION, name: ontologyId, lineId, entities: [], relations: [], rules: [], bindings: [], note: '' }
268
+ return { schemaVersion: ONTOLOGY_SCHEMA_VERSION, name: ontologyId, description: '', lineId, entities: [], relations: [], rules: [], bindings: [], note: '' }
267
269
  }
268
270
 
269
271
  export function parseDraftDoc(value: unknown): OntologyDraftDoc {
@@ -8,3 +8,5 @@ export * from './guards'
8
8
  export * from './repo'
9
9
  export * from './semantic-binding.service'
10
10
  export * from './ontology.service'
11
+ export * from './subgraph.core'
12
+ export * from './subgraph.service'
@@ -43,6 +43,7 @@ import {
43
43
  } from './repo'
44
44
  import { detectBindingDrift, validateDraftBindings } from './semantic-binding.service'
45
45
  import { getDcwController } from '../dcw/dcw-controller'
46
+ import { autoFixDraftDoc, type OntologyAutoFix } from './autofix'
46
47
  import { validateDraftDoc, type DraftValidationReport } from './validator'
47
48
 
48
49
  export interface Actor {
@@ -185,6 +186,7 @@ function cloneVersionDoc(version: VersionRow): OntologyDraftDoc {
185
186
  return {
186
187
  schemaVersion: ONTOLOGY_SCHEMA_VERSION,
187
188
  name: version.name || version.id,
189
+ description: '',
188
190
  lineId: version.lineId,
189
191
  entities,
190
192
  relations,
@@ -272,6 +274,50 @@ export function deleteDraft(draftId: string, actor: Actor): void {
272
274
  log({ ontologyId: draft.ontologyId, action: 'draft.delete', actor, detail: { draftId } })
273
275
  }
274
276
 
277
+ /**
278
+ * 自动修复草稿(Agent 工具与 UI「自动修复」共用):
279
+ * 与 updateDraft 同一写路径(乐观锁 rev + 审计),区别有两点:
280
+ * - strictBindings=false:平台侧绑定漂移不阻塞文档内安全修复的落库;
281
+ * - 允许「部分修复」落库:自动修复后仍有不可自动修复的错误(如证据缺失)时,
282
+ * 已做的安全规范化照样保存,剩余错误随 validation 原样返回 —— 否则修复器
283
+ * 在历史/导入的脏草稿上会因残余错误整体回滚,等于不可用。
284
+ * 证据永不伪造:残余错误只能由人/Agent 补真实证据后再次校验。
285
+ */
286
+ export function autoFixDraft(draftId: string, actor: Actor): {
287
+ draft: DraftRow
288
+ doc: OntologyDraftDoc
289
+ validation: DraftValidationReport
290
+ bindings: ReturnType<typeof validateDraftBindings>
291
+ fixes: OntologyAutoFix[]
292
+ } {
293
+ requireEditor(actor, '自动修复本体草稿')
294
+ const draft = getDraft(draftId)
295
+ requireDraftAccess(draft, actor, { write: true })
296
+ const { doc, fixes, validation } = autoFixDraftDoc(parseDraftRow(draft))
297
+ const bindings = validateDraftBindings(doc, { lineId: doc.lineId })
298
+ if (!fixes.length) {
299
+ return { draft, doc, validation, bindings, fixes }
300
+ }
301
+ let updated: DraftRow
302
+ if (validation.ok) {
303
+ // 修复后完全合法:走标准写路径(含活体绑定复核与审计)
304
+ const detail = updateDraft(draftId, actor, { doc, expectedRev: draft.rev, strictBindings: false })
305
+ updated = detail.draft
306
+ }
307
+ else {
308
+ // 部分修复:直接落库(乐观锁 + 审计),残余错误由回执暴露,不静默掩盖
309
+ updated = getOntologyRepo().updateDraft(draftId, JSON.stringify(doc), draft.rev)
310
+ }
311
+ log({
312
+ ontologyId: updated.ontologyId,
313
+ version: updated.baseVersion ?? 0,
314
+ action: 'draft.autofix',
315
+ actor,
316
+ detail: { draftId, rev: updated.rev, fixes: fixes.length, residualErrors: validation.issues.filter(i => i.severity === 'error').length },
317
+ })
318
+ return { draft: updated, doc, validation, bindings, fixes }
319
+ }
320
+
275
321
  // ===== 校验 / 编译预览 =====
276
322
 
277
323
  export function validateDraft(draftId: string, actor: Actor): DraftValidationReport & { bindings: ReturnType<typeof validateDraftBindings> } {