agentworkshop 0.7.59 → 0.7.61

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 (541) hide show
  1. package/.AgentWorkShop/prompts/host-tools.json +108 -0
  2. package/.output/.AgentWorkShop/prompts/host-tools.json +108 -0
  3. package/.output/.AgentWorkShop/schema.json +1 -0
  4. package/.output/nitro.json +1 -1
  5. package/.output/public/_nuxt/9j2J4k4w.js +1 -0
  6. package/.output/public/_nuxt/{DTx_DtUo.js → B0w8DZ4C.js} +1 -1
  7. package/.output/public/_nuxt/{cBI0JqsV.js → BMlesJth.js} +1 -1
  8. package/.output/public/_nuxt/BTXdYngG.js +1 -0
  9. package/.output/public/_nuxt/{DMPpE41S2.js → BXbKTAwC2.js} +1 -1
  10. package/.output/public/_nuxt/{Bn1N3mJv.js → B_6yBa_Z.js} +1 -1
  11. package/.output/public/_nuxt/{D6c5ppqB.js → B_ic601Y.js} +1 -1
  12. package/.output/public/_nuxt/BegV7-FE2.js +1 -0
  13. package/.output/public/_nuxt/BhllzW3K2.js +1 -0
  14. package/.output/public/_nuxt/BrRXGr472.js +1 -0
  15. package/.output/public/_nuxt/{BMZ1d25O.js → BtBgrPNT.js} +1 -1
  16. package/.output/public/_nuxt/C5MPzgon2.js +1 -0
  17. package/.output/public/_nuxt/CGChCy-w2.js +1 -0
  18. package/.output/public/_nuxt/CI5sliIF2.js +1 -0
  19. package/.output/public/_nuxt/{DTZO6WMs2.js → CI8awYVQ2.js} +1 -1
  20. package/.output/public/_nuxt/{B03LfmKR.js → CK2ts9sD.js} +1 -1
  21. package/.output/public/_nuxt/CPZKwmLQ.js +1 -0
  22. package/.output/public/_nuxt/CUjdqsjC2.js +1 -0
  23. package/.output/public/_nuxt/{C5wBzGO7.js → CVUMEGa1.js} +1 -1
  24. package/.output/public/_nuxt/{CYGkUj5M2.js → CcLFZjCI2.js} +1 -1
  25. package/.output/public/_nuxt/{iZa330UY.js → Cdw4juXw.js} +1 -1
  26. package/.output/public/_nuxt/{h46i74oE.js → CeEzUIvN.js} +4 -4
  27. package/.output/public/_nuxt/{zGDAozGA.js → CfIGBe_4.js} +4 -4
  28. package/.output/public/_nuxt/{CmTqFlYZ.js → Ci5kuU1q.js} +1 -1
  29. package/.output/public/_nuxt/CiyTTgqr.js +106 -0
  30. package/.output/public/_nuxt/{Dy-V8OEW2.js → CkYk8bj02.js} +6 -6
  31. package/.output/public/_nuxt/Cmiz_VOb2.js +47 -0
  32. package/.output/public/_nuxt/{VVomhVqu2.js → Cnf1PFhB2.js} +1 -1
  33. package/.output/public/_nuxt/CoTm7jd3.js +28 -0
  34. package/.output/public/_nuxt/{BzKT-ne_2.js → CsN8RHJ02.js} +1 -1
  35. package/.output/public/_nuxt/Cst8yEet.js +1 -0
  36. package/.output/public/_nuxt/Cuw2--X2.js +2 -0
  37. package/.output/public/_nuxt/D-jg-SoR.js +1 -0
  38. package/.output/public/_nuxt/{B4R5CHkk.js → D-z6N1Cz.js} +1 -1
  39. package/.output/public/_nuxt/D3gfSKKi2.js +1 -0
  40. package/.output/public/_nuxt/{BtNT93vm2.js → D4elH6Bo2.js} +1 -1
  41. package/.output/public/_nuxt/{BuVH9MB-.js → D4tAdwYm.js} +1 -1
  42. package/.output/public/_nuxt/D5-QB_-l.js +1 -0
  43. package/.output/public/_nuxt/DBzdrPzw2.js +1 -0
  44. package/.output/public/_nuxt/{CCCq9H7D2.js → DC7WzYCf2.js} +1 -1
  45. package/.output/public/_nuxt/DD4J2Otc.js +1 -0
  46. package/.output/public/_nuxt/DE-qkHRd2.js +1 -0
  47. package/.output/public/_nuxt/{BXKCB3rS.js → DE2kUGPK.js} +1 -1
  48. package/.output/public/_nuxt/{CoGETbe-2.js → DI4sdLmu2.js} +1 -1
  49. package/.output/public/_nuxt/DKHA3XxF.js +2 -0
  50. package/.output/public/_nuxt/{Drhta6gr.js → DL6fliAT.js} +2 -2
  51. package/.output/public/_nuxt/{DvUt9uMt2.js → DP6tsk912.js} +1 -1
  52. package/.output/public/_nuxt/DP_e7Vwv.js +24 -0
  53. package/.output/public/_nuxt/{DKhRushG.js → DR83EvmX.js} +1 -1
  54. package/.output/public/_nuxt/DSWuWYx_2.js +1 -0
  55. package/.output/public/_nuxt/{BhrnGVGz.js → DSdxfFX_.js} +1 -1
  56. package/.output/public/_nuxt/DVS06wUy2.js +13 -0
  57. package/.output/public/_nuxt/DXlAfhEi.js +3 -0
  58. package/.output/public/_nuxt/Dc5NeCDq.js +1 -0
  59. package/.output/public/_nuxt/{CW1HGp5X.js → DiHL9ehB.js} +1 -1
  60. package/.output/public/_nuxt/DjtDexGg.js +1 -0
  61. package/.output/public/_nuxt/{CuRtzvsa2.js → DnunMTRD2.js} +1 -1
  62. package/.output/public/_nuxt/{CZ0Gt81h.js → Dok0B4Ol.js} +2 -2
  63. package/.output/public/_nuxt/DqT2_Jtw2.js +1 -0
  64. package/.output/public/_nuxt/{DJZzthKt2.js → DtMlAxCm2.js} +1 -1
  65. package/.output/public/_nuxt/{Du0zf-d3.js → DwzJpr7P.js} +1 -1
  66. package/.output/public/_nuxt/J94L7hHq2.js +1 -0
  67. package/.output/public/_nuxt/LQBLwrYS2.js +1 -0
  68. package/.output/public/_nuxt/N9TYd_Mk2.js +1 -0
  69. package/.output/public/_nuxt/QSY9fE482.js +1 -0
  70. package/.output/public/_nuxt/{MEwEMEMl2.js → Qa9rS9oK2.js} +6 -6
  71. package/.output/public/_nuxt/{pNy4V4kd.js → R3gBFghJ2.js} +1 -1
  72. package/.output/public/_nuxt/{BAqtRt0q.js → ZxBwmbs9.js} +1 -1
  73. package/.output/public/_nuxt/{BMUEVeOK.js → _mD4IkJj.js} +1 -1
  74. package/.output/public/_nuxt/analysis.DfMg76el.css +1 -0
  75. package/.output/public/_nuxt/builds/latest.json +1 -1
  76. package/.output/public/_nuxt/builds/meta/eba8574d-1991-47df-944c-18608bb58181.json +1 -0
  77. package/.output/public/_nuxt/c_nqArmG.js +1 -0
  78. package/.output/public/_nuxt/{default.8ac6QU28.css → default.Bx6RJSbr.css} +1 -1
  79. package/.output/public/_nuxt/{entry.BHNNQA9H.css → entry.BlbU43qz.css} +1 -1
  80. package/.output/public/_nuxt/h8ddxY892.js +1 -0
  81. package/.output/public/_nuxt/{TjGWqrHo.js → i3KBHle7.js} +1 -1
  82. package/.output/public/_nuxt/jmKfTQMN.js +13 -0
  83. package/.output/public/_nuxt/{CZwDnomB.js → taHLOXkS.js} +1 -1
  84. package/.output/public/_nuxt/uYP6z4G72.js +1 -0
  85. package/.output/public/_nuxt/{CIz7SM4H.js → yuIP6K9s.js} +1 -1
  86. package/.output/public/_nuxt/zWg-9WN6.js +19 -0
  87. package/.output/public/_nuxt/zrgcKVTq.js +2 -0
  88. package/.output/server/chunks/_/LeftOutlined.mjs +1 -1
  89. package/.output/server/chunks/_/character-asset.repo.mjs +1 -1
  90. package/.output/server/chunks/_/host-bindings.mjs +1 -1
  91. package/.output/server/chunks/_/nitro.mjs +1662 -1232
  92. package/.output/server/chunks/_/nitro.mjs.map +1 -1
  93. package/.output/server/chunks/_/scene-layout.repo.mjs +1 -1
  94. package/.output/server/chunks/build/{AuthGate-DDPYswkA.mjs → AuthGate-BK2RqkbD.mjs} +5 -5
  95. package/.output/server/chunks/build/{AuthGate-DDPYswkA.mjs.map → AuthGate-BK2RqkbD.mjs.map} +1 -1
  96. package/.output/server/chunks/build/Checkbox-4EdGAAl_.mjs +1 -1
  97. package/.output/server/chunks/build/{FormItemContext-4ORSzhWv.mjs → FormItemContext-BqtgOBDe.mjs} +2 -2
  98. package/.output/server/chunks/build/{FormItemContext-4ORSzhWv.mjs.map → FormItemContext-BqtgOBDe.mjs.map} +1 -1
  99. package/.output/server/chunks/build/{OmpTerminalPanel-DZ2wHMS1.mjs → OmpTerminalPanel-Bun6rpAk.mjs} +4 -4
  100. package/.output/server/chunks/build/{OmpTerminalPanel-DZ2wHMS1.mjs.map → OmpTerminalPanel-Bun6rpAk.mjs.map} +1 -1
  101. package/.output/server/chunks/build/{PluginSlot-CT4YaNrB.mjs → PluginSlot-Do6dX0RE.mjs} +2 -2
  102. package/.output/server/chunks/build/{PluginSlot-CT4YaNrB.mjs.map → PluginSlot-Do6dX0RE.mjs.map} +1 -1
  103. package/.output/server/chunks/build/{TownView-CZbFn6mO.mjs → TownView-kQZFf4zj.mjs} +3 -3
  104. package/.output/server/chunks/build/{TownView-CZbFn6mO.mjs.map → TownView-kQZFf4zj.mjs.map} +1 -1
  105. package/.output/server/chunks/build/{_id_-Df2pgsAq.mjs → _id_-Bbx1b74O.mjs} +3 -3
  106. package/.output/server/chunks/build/{_id_-Df2pgsAq.mjs.map → _id_-Bbx1b74O.mjs.map} +1 -1
  107. package/.output/server/chunks/build/{_id_-CCVhpJtj.mjs → _id_-IijrRw3f.mjs} +3 -3
  108. package/.output/server/chunks/build/{_id_-CCVhpJtj.mjs.map → _id_-IijrRw3f.mjs.map} +1 -1
  109. package/.output/server/chunks/build/{_wsId_-CJqF-hmP.mjs → _wsId_-Dp3ACbQ5.mjs} +22 -21
  110. package/.output/server/chunks/build/{_wsId_-CJqF-hmP.mjs.map → _wsId_-Dp3ACbQ5.mjs.map} +1 -1
  111. package/.output/server/chunks/build/{agents-BTsbna5H.mjs → agents-BfIoGr_p.mjs} +18 -17
  112. package/.output/server/chunks/build/agents-BfIoGr_p.mjs.map +1 -0
  113. package/.output/server/chunks/build/{aml-BBKfWto1.mjs → aml-B5zKrvB3.mjs} +7 -7
  114. package/.output/server/chunks/build/{aml-BBKfWto1.mjs.map → aml-B5zKrvB3.mjs.map} +1 -1
  115. package/.output/server/chunks/build/analysis-MVEnlO7A.mjs +531 -0
  116. package/.output/server/chunks/build/analysis-MVEnlO7A.mjs.map +1 -0
  117. package/.output/server/chunks/build/{card-DJOYGuVH.mjs → card-IyQjdGXA.mjs} +4 -4
  118. package/.output/server/chunks/build/{card-DJOYGuVH.mjs.map → card-IyQjdGXA.mjs.map} +1 -1
  119. package/.output/server/chunks/build/{channel-templates-BPKJ8e4l.mjs → channel-templates-Bd8bgBCh.mjs} +11 -10
  120. package/.output/server/chunks/build/channel-templates-Bd8bgBCh.mjs.map +1 -0
  121. package/.output/server/chunks/build/{checkbox-C4AKj81e.mjs → checkbox-NnjtOam0.mjs} +3 -3
  122. package/.output/server/chunks/build/{checkbox-C4AKj81e.mjs.map → checkbox-NnjtOam0.mjs.map} +1 -1
  123. package/.output/server/chunks/build/{daq-Cz7TaUAM.mjs → daq-mC3-5A0L.mjs} +5 -5
  124. package/.output/server/chunks/build/{daq-Cz7TaUAM.mjs.map → daq-mC3-5A0L.mjs.map} +1 -1
  125. package/.output/server/chunks/build/dcw-EhjJpVQM.mjs +2 -2
  126. package/.output/server/chunks/build/{default-DweMY872.mjs → default-flcNWlNg.mjs} +30 -19
  127. package/.output/server/chunks/build/{default-DweMY872.mjs.map → default-flcNWlNg.mjs.map} +1 -1
  128. package/.output/server/chunks/build/{descriptions-CFaUq4y4.mjs → descriptions-DuAefuzp.mjs} +2 -2
  129. package/.output/server/chunks/build/{descriptions-CFaUq4y4.mjs.map → descriptions-DuAefuzp.mjs.map} +1 -1
  130. package/.output/server/chunks/build/{drawer-Cfh9_zft.mjs → drawer-DEIB1_X6.mjs} +2 -2
  131. package/.output/server/chunks/build/{drawer-Cfh9_zft.mjs.map → drawer-DEIB1_X6.mjs.map} +1 -1
  132. package/.output/server/chunks/build/{dropdown-CV9GW3z9.mjs → dropdown-BuD1pxH2.mjs} +6 -5
  133. package/.output/server/chunks/build/{dropdown-CV9GW3z9.mjs.map → dropdown-BuD1pxH2.mjs.map} +1 -1
  134. package/.output/server/chunks/build/{dropdown-CIsqbX4P.mjs → dropdown-w7qhyN2D.mjs} +2 -2
  135. package/.output/server/chunks/build/{dropdown-CIsqbX4P.mjs.map → dropdown-w7qhyN2D.mjs.map} +1 -1
  136. package/.output/server/chunks/build/es-DfgEl5n-.mjs +42 -0
  137. package/.output/server/chunks/build/es-DfgEl5n-.mjs.map +1 -0
  138. package/.output/server/chunks/build/{form-cs_RcfGx.mjs → form-CMLL_-Xx.mjs} +7 -6
  139. package/.output/server/chunks/build/{form-cs_RcfGx.mjs.map → form-CMLL_-Xx.mjs.map} +1 -1
  140. package/.output/server/chunks/build/{input-CobQ5LJ5.mjs → input-DZcioTwL.mjs} +93 -3449
  141. package/.output/server/chunks/build/input-DZcioTwL.mjs.map +1 -0
  142. package/.output/server/chunks/build/{input-number-BpPYAWMk.mjs → input-number-BRnbiKLd.mjs} +6 -5
  143. package/.output/server/chunks/build/{input-number-BpPYAWMk.mjs.map → input-number-BRnbiKLd.mjs.map} +1 -1
  144. package/.output/server/chunks/build/{logs-As9fZqU-.mjs → logs-BYop3JfX.mjs} +3 -3
  145. package/.output/server/chunks/build/{logs-As9fZqU-.mjs.map → logs-BYop3JfX.mjs.map} +1 -1
  146. package/.output/server/chunks/build/{menu-CVmvHyFT.mjs → menu-DXfhc0qN.mjs} +4 -3
  147. package/.output/server/chunks/build/{menu-CVmvHyFT.mjs.map → menu-DXfhc0qN.mjs.map} +1 -1
  148. package/.output/server/chunks/build/{monitor-CdFQ2z4g.mjs → monitor-BjBGkUm2.mjs} +20 -19
  149. package/.output/server/chunks/build/{monitor-CdFQ2z4g.mjs.map → monitor-BjBGkUm2.mjs.map} +1 -1
  150. package/.output/server/chunks/build/{operations-B2gHCWgZ.mjs → operations-fxI8lEBJ.mjs} +3 -3
  151. package/.output/server/chunks/build/{operations-B2gHCWgZ.mjs.map → operations-fxI8lEBJ.mjs.map} +1 -1
  152. package/.output/server/chunks/build/{pages-BItCt1ar.mjs → pages-6JD9VSbx.mjs} +5 -5
  153. package/.output/server/chunks/build/{pages-BItCt1ar.mjs.map → pages-6JD9VSbx.mjs.map} +1 -1
  154. package/.output/server/chunks/build/{permissions-D6mQw_9j.mjs → permissions-u5SZL8Fe.mjs} +14 -13
  155. package/.output/server/chunks/build/permissions-u5SZL8Fe.mjs.map +1 -0
  156. package/.output/server/chunks/build/{plugins-NAS9MQ5r.mjs → plugins-Cas6KOF-.mjs} +5 -5
  157. package/.output/server/chunks/build/{plugins-NAS9MQ5r.mjs.map → plugins-Cas6KOF-.mjs.map} +1 -1
  158. package/.output/server/chunks/build/{popconfirm-DFfoFhmt.mjs → popconfirm-BWxt-53K.mjs} +3 -3
  159. package/.output/server/chunks/build/{popconfirm-DFfoFhmt.mjs.map → popconfirm-BWxt-53K.mjs.map} +1 -1
  160. package/.output/server/chunks/build/{schedules-BjWNDWL5.mjs → schedules-Ct68Jrvw.mjs} +20 -19
  161. package/.output/server/chunks/build/{schedules-BjWNDWL5.mjs.map → schedules-Ct68Jrvw.mjs.map} +1 -1
  162. package/.output/server/chunks/build/{segmented-D7FkCgg7.mjs → segmented-DN62bOFu.mjs} +3 -3
  163. package/.output/server/chunks/build/{segmented-D7FkCgg7.mjs.map → segmented-DN62bOFu.mjs.map} +1 -1
  164. package/.output/server/chunks/build/{select-FqBNxgxT.mjs → select-DQv1DXcW.mjs} +5 -4
  165. package/.output/server/chunks/build/{select-FqBNxgxT.mjs.map → select-DQv1DXcW.mjs.map} +1 -1
  166. package/.output/server/chunks/build/{settings-Cl_KRyEn.mjs → settings-CQzR1YXR.mjs} +14 -13
  167. package/.output/server/chunks/build/settings-CQzR1YXR.mjs.map +1 -0
  168. package/.output/server/chunks/build/{space-B2uhHJG8.mjs → space-6FfG3llN.mjs} +2 -2
  169. package/.output/server/chunks/build/{space-B2uhHJG8.mjs.map → space-6FfG3llN.mjs.map} +1 -1
  170. package/.output/server/chunks/build/{switch-DZAUIbIN.mjs → switch-CfsCVFQP.mjs} +3 -3
  171. package/.output/server/chunks/build/{switch-DZAUIbIN.mjs.map → switch-CfsCVFQP.mjs.map} +1 -1
  172. package/.output/server/chunks/build/{table-CeOYERqr.mjs → table-HOjbB5YY.mjs} +11 -10
  173. package/.output/server/chunks/build/{table-CeOYERqr.mjs.map → table-HOjbB5YY.mjs.map} +1 -1
  174. package/.output/server/chunks/build/{tabs-LLNSdLl2.mjs → tabs-CC26Rbcw.mjs} +6 -5
  175. package/.output/server/chunks/build/{tabs-LLNSdLl2.mjs.map → tabs-CC26Rbcw.mjs.map} +1 -1
  176. package/.output/server/chunks/build/{tag-Dwvkh0Dj.mjs → tag-BtOMjpDx.mjs} +5 -4
  177. package/.output/server/chunks/build/{tag-Dwvkh0Dj.mjs.map → tag-BtOMjpDx.mjs.map} +1 -1
  178. package/.output/server/chunks/build/{teams-CGDZHaQl.mjs → teams-Re0wY2SQ.mjs} +19 -18
  179. package/.output/server/chunks/build/teams-Re0wY2SQ.mjs.map +1 -0
  180. package/.output/server/chunks/build/{tokens-BOYkZuoB.mjs → tokens-DLFIUvXE.mjs} +19 -18
  181. package/.output/server/chunks/build/tokens-DLFIUvXE.mjs.map +1 -0
  182. package/.output/server/chunks/build/tooltip-BSDwL_LM.mjs +3362 -0
  183. package/.output/server/chunks/build/tooltip-BSDwL_LM.mjs.map +1 -0
  184. package/.output/server/chunks/build/town-BV-hbwb5.mjs +1 -1
  185. package/.output/server/chunks/build/{town-P1rYoi0v.mjs → town-Bfme7P2I.mjs} +5 -5
  186. package/.output/server/chunks/build/{town-P1rYoi0v.mjs.map → town-Bfme7P2I.mjs.map} +1 -1
  187. package/.output/server/chunks/build/types-D6J7slEa.mjs +1 -1
  188. package/.output/server/chunks/build/types-DWqIeMRP.mjs +75 -0
  189. package/.output/server/chunks/build/types-DWqIeMRP.mjs.map +1 -0
  190. package/.output/server/chunks/build/{useAgentTemplateActions-DsBRUQni.mjs → useAgentTemplateActions-CjBwCb3u.mjs} +1 -1
  191. package/.output/server/chunks/build/{useAgentTemplateActions-DsBRUQni.mjs.map → useAgentTemplateActions-CjBwCb3u.mjs.map} +1 -1
  192. package/.output/server/chunks/build/{useAgentTemplateForm-DzQ_t2Ue.mjs → useAgentTemplateForm-BX9_xqj8.mjs} +1 -1
  193. package/.output/server/chunks/build/{useAgentTemplateForm-DzQ_t2Ue.mjs.map → useAgentTemplateForm-BX9_xqj8.mjs.map} +1 -1
  194. package/.output/server/chunks/build/{useAmlEntities-BMLHU_39.mjs → useAmlEntities-BrcTqHwa.mjs} +2 -2
  195. package/.output/server/chunks/build/{useAmlEntities-BMLHU_39.mjs.map → useAmlEntities-BrcTqHwa.mjs.map} +1 -1
  196. package/.output/server/chunks/build/{useAmlEnv-DdlyVzPu.mjs → useAmlEnv-jiGYK790.mjs} +1 -1
  197. package/.output/server/chunks/build/{useAmlEnv-DdlyVzPu.mjs.map → useAmlEnv-jiGYK790.mjs.map} +1 -1
  198. package/.output/server/chunks/build/{useAmlJobs-BG_v21hJ.mjs → useAmlJobs-CVZ1btzg.mjs} +1 -1
  199. package/.output/server/chunks/build/{useAmlJobs-BG_v21hJ.mjs.map → useAmlJobs-CVZ1btzg.mjs.map} +1 -1
  200. package/.output/server/chunks/build/{useAmlModels-D7MuOWOy.mjs → useAmlModels-DJkQzcCU.mjs} +1 -1
  201. package/.output/server/chunks/build/{useAmlModels-D7MuOWOy.mjs.map → useAmlModels-DJkQzcCU.mjs.map} +1 -1
  202. package/.output/server/chunks/build/{useAmlNotes-CTZe-GI0.mjs → useAmlNotes-DKnx9a8x.mjs} +1 -1
  203. package/.output/server/chunks/build/{useAmlNotes-CTZe-GI0.mjs.map → useAmlNotes-DKnx9a8x.mjs.map} +1 -1
  204. package/.output/server/chunks/build/{useAmlPredict-BToRrVRV.mjs → useAmlPredict-Bp4ehwKw.mjs} +1 -1
  205. package/.output/server/chunks/build/{useAmlPredict-BToRrVRV.mjs.map → useAmlPredict-Bp4ehwKw.mjs.map} +1 -1
  206. package/.output/server/chunks/build/useAnalysisFeed-B4OwUd7p.mjs +128 -0
  207. package/.output/server/chunks/build/useAnalysisFeed-B4OwUd7p.mjs.map +1 -0
  208. package/.output/server/chunks/build/useDaqAddNode-CaOCbe4-.mjs +1 -1
  209. package/.output/server/chunks/build/{useDaqDetailNode-DXgwAu5u.mjs → useDaqDetailNode-DtZ0oDAn.mjs} +3 -3
  210. package/.output/server/chunks/build/{useDaqDetailNode-DXgwAu5u.mjs.map → useDaqDetailNode-DtZ0oDAn.mjs.map} +1 -1
  211. package/.output/server/chunks/build/useDaqDetailParams-CrTMDs-2.mjs +1 -1
  212. package/.output/server/chunks/build/{useDaqFilters-Jx6EERfr.mjs → useDaqFilters-DYHGhECw.mjs} +3 -3
  213. package/.output/server/chunks/build/{useDaqFilters-Jx6EERfr.mjs.map → useDaqFilters-DYHGhECw.mjs.map} +1 -1
  214. package/.output/server/chunks/build/useDaqStream-DhzdoyIR.mjs +1 -1
  215. package/.output/server/chunks/build/useDaqTemplates-C7GzQmdJ.mjs +1 -1
  216. package/.output/server/chunks/build/{useDashboardData-Ce-EU5DJ.mjs → useDashboardData-B3lZjE7x.mjs} +3 -3
  217. package/.output/server/chunks/build/{useDashboardData-Ce-EU5DJ.mjs.map → useDashboardData-B3lZjE7x.mjs.map} +1 -1
  218. package/.output/server/chunks/build/useDcwAddNode-4mTPQ6T8.mjs +1 -1
  219. package/.output/server/chunks/build/{useDcwDetailScope-4j3B03Pi.mjs → useDcwDetailScope-BWH7jnVh.mjs} +2 -2
  220. package/.output/server/chunks/build/{useDcwDetailScope-4j3B03Pi.mjs.map → useDcwDetailScope-BWH7jnVh.mjs.map} +1 -1
  221. package/.output/server/chunks/build/useDcwStream-BXJ2V8HM.mjs +1 -1
  222. package/.output/server/chunks/build/{useLogsManual-CMjD62nt.mjs → useLogsManual-CElmZuJh.mjs} +1 -1
  223. package/.output/server/chunks/build/{useLogsManual-CMjD62nt.mjs.map → useLogsManual-CElmZuJh.mjs.map} +1 -1
  224. package/.output/server/chunks/build/{useMonitorData-D2gFSonG.mjs → useMonitorData-DcIfMEiz.mjs} +1 -1
  225. package/.output/server/chunks/build/{useMonitorData-D2gFSonG.mjs.map → useMonitorData-DcIfMEiz.mjs.map} +1 -1
  226. package/.output/server/chunks/build/{useTeamActions-BOLQkYxg.mjs → useTeamActions-C3_O_AIU.mjs} +1 -1
  227. package/.output/server/chunks/build/{useTeamActions-BOLQkYxg.mjs.map → useTeamActions-C3_O_AIU.mjs.map} +1 -1
  228. package/.output/server/chunks/build/{useTeamAddMemberDialog-BCgrLPxI.mjs → useTeamAddMemberDialog-DWAoZCKd.mjs} +1 -1
  229. package/.output/server/chunks/build/{useTeamAddMemberDialog-BCgrLPxI.mjs.map → useTeamAddMemberDialog-DWAoZCKd.mjs.map} +1 -1
  230. package/.output/server/chunks/build/{useTeamCreateDialog-CJk40LqS.mjs → useTeamCreateDialog-911mIPWd.mjs} +1 -1
  231. package/.output/server/chunks/build/{useTeamCreateDialog-CJk40LqS.mjs.map → useTeamCreateDialog-911mIPWd.mjs.map} +1 -1
  232. package/.output/server/chunks/build/{useTeamDeployDialog-49hdUXQP.mjs → useTeamDeployDialog-D0STROoQ.mjs} +1 -1
  233. package/.output/server/chunks/build/{useTeamDeployDialog-49hdUXQP.mjs.map → useTeamDeployDialog-D0STROoQ.mjs.map} +1 -1
  234. package/.output/server/chunks/build/{useTeamPluginDialog-Dh-QOoiU.mjs → useTeamPluginDialog-Df6-e2OW.mjs} +1 -1
  235. package/.output/server/chunks/build/{useTeamPluginDialog-Dh-QOoiU.mjs.map → useTeamPluginDialog-Df6-e2OW.mjs.map} +1 -1
  236. package/.output/server/chunks/build/{useTokenCreate-DkYvEQUD.mjs → useTokenCreate-DOojAhM5.mjs} +1 -1
  237. package/.output/server/chunks/build/{useTokenCreate-DkYvEQUD.mjs.map → useTokenCreate-DOojAhM5.mjs.map} +1 -1
  238. package/.output/server/chunks/build/{useTokenRename-DOCP4aeI.mjs → useTokenRename-CMA5dLHx.mjs} +1 -1
  239. package/.output/server/chunks/build/{useTokenRename-DOCP4aeI.mjs.map → useTokenRename-CMA5dLHx.mjs.map} +1 -1
  240. package/.output/server/chunks/build/{useTokenReveal-CybwwflV.mjs → useTokenReveal-C19aCKzt.mjs} +1 -1
  241. package/.output/server/chunks/build/{useTokenReveal-CybwwflV.mjs.map → useTokenReveal-C19aCKzt.mjs.map} +1 -1
  242. package/.output/server/chunks/build/{useTokensList-BLiMvrc4.mjs → useTokensList-D0ZpLOhR.mjs} +1 -1
  243. package/.output/server/chunks/build/{useTokensList-BLiMvrc4.mjs.map → useTokensList-D0ZpLOhR.mjs.map} +1 -1
  244. package/.output/server/chunks/build/{useWorkbenchAuth-DAabQl7X.mjs → useWorkbenchAuth-CN5E3J5L.mjs} +1 -1
  245. package/.output/server/chunks/build/{useWorkbenchAuth-DAabQl7X.mjs.map → useWorkbenchAuth-CN5E3J5L.mjs.map} +1 -1
  246. package/.output/server/chunks/build/{useWorkbenchWorkspaces-6-mpCGCR.mjs → useWorkbenchWorkspaces-ChKByQSD.mjs} +1 -1
  247. package/.output/server/chunks/build/{useWorkbenchWorkspaces-6-mpCGCR.mjs.map → useWorkbenchWorkspaces-ChKByQSD.mjs.map} +1 -1
  248. package/.output/server/chunks/build/{users-B_pHStEa.mjs → users-BW4jowK4.mjs} +15 -14
  249. package/.output/server/chunks/build/users-BW4jowK4.mjs.map +1 -0
  250. package/.output/server/chunks/build/{workshop-C0DefygA.mjs → workshop-Bx55czXL.mjs} +11 -10
  251. package/.output/server/chunks/build/workshop-Bx55czXL.mjs.map +1 -0
  252. package/.output/server/chunks/routes/api/mcp/workshop.mjs +1 -1
  253. package/.output/server/chunks/routes/api/system/backup/run.post.mjs +2 -2
  254. package/.output/server/chunks/routes/api/workshop/analysis/_id_.delete.mjs +46 -0
  255. package/.output/server/chunks/routes/api/workshop/analysis/_id_.delete.mjs.map +1 -0
  256. package/.output/server/chunks/routes/api/workshop/analysis/_id_.get.mjs +40 -0
  257. package/.output/server/chunks/routes/api/workshop/analysis/_id_.get.mjs.map +1 -0
  258. package/.output/server/chunks/routes/api/workshop/analysis/_id_.patch.mjs +103 -0
  259. package/.output/server/chunks/routes/api/workshop/analysis/_id_.patch.mjs.map +1 -0
  260. package/.output/server/chunks/routes/api/workshop/assets/index.post.mjs +1 -1
  261. package/.output/server/chunks/routes/api/workshop/assets/index2.post.mjs +1 -1
  262. package/.output/server/chunks/routes/api/workshop/channel-templates/_id/instantiate.post.mjs +2 -2
  263. package/.output/server/chunks/routes/api/workshop/channels/_id/activate.post.mjs +1 -1
  264. package/.output/server/chunks/routes/api/workshop/channels/_id/chat/index.post.mjs +1 -1
  265. package/.output/server/chunks/routes/api/workshop/channels/_id/index.post.mjs +1 -1
  266. package/.output/server/chunks/routes/api/workshop/channels/_id/index.put.mjs +1 -1
  267. package/.output/server/chunks/routes/api/workshop/channels/_id/index3.post.mjs +1 -1
  268. package/.output/server/chunks/routes/api/workshop/channels/_id/index4.post.mjs +1 -1
  269. package/.output/server/chunks/routes/api/workshop/channels/_id/index5.get.mjs +1 -1
  270. package/.output/server/chunks/routes/api/workshop/channels/_id/line.put.mjs +1 -1
  271. package/.output/server/chunks/routes/api/workshop/channels/_id/terminals.get.mjs +1 -1
  272. package/.output/server/chunks/routes/api/workshop/channels/_id/twin-profile.get.mjs +1 -1
  273. package/.output/server/chunks/routes/api/workshop/channels/_id/twin-profile.patch.mjs +1 -1
  274. package/.output/server/chunks/routes/api/workshop/channels/index.get.mjs +1 -1
  275. package/.output/server/chunks/routes/api/workshop/channels.post.mjs +7 -7
  276. package/.output/server/chunks/routes/api/workshop/daq/_id/samples.get.mjs +1 -1
  277. package/.output/server/chunks/routes/api/workshop/daq/index.post.mjs +1 -1
  278. package/.output/server/chunks/routes/api/workshop/daq/infra/reconnect.post.mjs +1 -1
  279. package/.output/server/chunks/routes/api/workshop/daq/infra.get.mjs +1 -1
  280. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.delete.mjs +1 -1
  281. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.patch.mjs +1 -1
  282. package/.output/server/chunks/routes/api/workshop/daq/test-driver.post.mjs +1 -1
  283. package/.output/server/chunks/routes/api/workshop/dcw/_id/bind.post.mjs +1 -1
  284. package/.output/server/chunks/routes/api/workshop/dcw/_id/bindings.put.mjs +1 -1
  285. package/.output/server/chunks/routes/api/workshop/dcw/_id/param-ledger.get.mjs +1 -1
  286. package/.output/server/chunks/routes/api/workshop/dcw/_id/read.post.mjs +1 -1
  287. package/.output/server/chunks/routes/api/workshop/dcw/_id/test.post.mjs +1 -1
  288. package/.output/server/chunks/routes/api/workshop/dcw/_id/write.post.mjs +1 -1
  289. package/.output/server/chunks/routes/api/workshop/dcw/_id_.delete.mjs +1 -1
  290. package/.output/server/chunks/routes/api/workshop/dcw/_id_.patch.mjs +1 -1
  291. package/.output/server/chunks/routes/api/workshop/dcw/controller.post.mjs +1 -1
  292. package/.output/server/chunks/routes/api/workshop/dcw/index.get.mjs +1 -1
  293. package/.output/server/chunks/routes/api/workshop/dcw/index.post.mjs +1 -1
  294. package/.output/server/chunks/routes/api/workshop/dcw/index2.get.mjs +1 -1
  295. package/.output/server/chunks/routes/api/workshop/dcw/index2.post.mjs +1 -1
  296. package/.output/server/chunks/routes/api/workshop/dcw/index3.get.mjs +1 -1
  297. package/.output/server/chunks/routes/api/workshop/dcw/index3.post.mjs +1 -1
  298. package/.output/server/chunks/routes/api/workshop/dcw/index4.get.mjs +1 -1
  299. package/.output/server/chunks/routes/api/workshop/dcw/index4.post.mjs +1 -1
  300. package/.output/server/chunks/routes/api/workshop/dcw/index5.get.mjs +1 -1
  301. package/.output/server/chunks/routes/api/workshop/dcw/index5.post.mjs +1 -1
  302. package/.output/server/chunks/routes/api/workshop/dcw/index6.get.mjs +1 -1
  303. package/.output/server/chunks/routes/api/workshop/dcw/index7.get.mjs +1 -1
  304. package/.output/server/chunks/routes/api/workshop/dcw/journal/node/_nodeId/rollback.post.mjs +1 -1
  305. package/.output/server/chunks/routes/api/workshop/dcw/line/query.get.mjs +1 -1
  306. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/start.post.mjs +1 -1
  307. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/stop.post.mjs +1 -1
  308. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.delete.mjs +1 -1
  309. package/.output/server/chunks/routes/api/workshop/dcw/mes-artifacts/file.get.mjs +1 -1
  310. package/.output/server/chunks/routes/api/workshop/dcw/mes-hook-test.post.mjs +1 -1
  311. package/.output/server/chunks/routes/api/workshop/dcw/mes-test-read.post.mjs +1 -1
  312. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/judge.post.mjs +1 -1
  313. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/rollback.post.mjs +1 -1
  314. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/series.get.mjs +1 -1
  315. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id_.get.mjs +1 -1
  316. package/.output/server/chunks/routes/api/workshop/dcw/params/_id/read.post.mjs +1 -1
  317. package/.output/server/chunks/routes/api/workshop/dcw/params/_id/write.post.mjs +1 -1
  318. package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.delete.mjs +1 -1
  319. package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.patch.mjs +1 -1
  320. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.delete.mjs +1 -1
  321. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.patch.mjs +1 -1
  322. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/apply.post.mjs +1 -1
  323. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/mark-good.post.mjs +1 -1
  324. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/rollback-good.post.mjs +1 -1
  325. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.delete.mjs +1 -1
  326. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/close.post.mjs +1 -1
  327. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/data.get.mjs +1 -1
  328. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/rollback.post.mjs +1 -1
  329. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.delete.mjs +1 -1
  330. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.patch.mjs +1 -1
  331. package/.output/server/chunks/routes/api/workshop/dcw/test-driver.post.mjs +1 -1
  332. package/.output/server/chunks/routes/api/workshop/device-twins/_id/control.post.mjs +1 -1
  333. package/.output/server/chunks/routes/api/workshop/device-twins/_id/telemetry.post.mjs +1 -1
  334. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.delete.mjs +1 -1
  335. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.patch.mjs +1 -1
  336. package/.output/server/chunks/routes/api/workshop/exp/confirmations/_id/decide.post.mjs +1 -1
  337. package/.output/server/chunks/routes/api/workshop/exp/index.get.mjs +1 -1
  338. package/.output/server/chunks/routes/api/workshop/fs/dirs.get.mjs +1 -1
  339. package/.output/server/chunks/routes/api/workshop/harnesses/_id/providers.get.mjs +1 -1
  340. package/.output/server/chunks/routes/api/workshop/harnesses.get.mjs +1 -1
  341. package/.output/server/chunks/routes/api/workshop/hitl/pending.get.mjs +1 -1
  342. package/.output/server/chunks/routes/api/workshop/hitl/respond.post.mjs +1 -1
  343. package/.output/server/chunks/routes/api/workshop/index.put.mjs +1 -1
  344. package/.output/server/chunks/routes/api/workshop/index10.get.mjs +20 -23
  345. package/.output/server/chunks/routes/api/workshop/index10.get.mjs.map +1 -1
  346. package/.output/server/chunks/routes/api/workshop/index11.get.mjs +25 -11
  347. package/.output/server/chunks/routes/api/workshop/index11.get.mjs.map +1 -1
  348. package/.output/server/chunks/routes/api/workshop/index12.get.mjs +10 -4
  349. package/.output/server/chunks/routes/api/workshop/index12.get.mjs.map +1 -1
  350. package/.output/server/chunks/routes/api/workshop/index13.get.mjs +2 -3
  351. package/.output/server/chunks/routes/api/workshop/index13.get.mjs.map +1 -1
  352. package/.output/server/chunks/routes/api/workshop/index14.get.mjs +3 -2
  353. package/.output/server/chunks/routes/api/workshop/index14.get.mjs.map +1 -1
  354. package/.output/server/chunks/routes/api/workshop/index15.get.mjs +30 -0
  355. package/.output/server/chunks/routes/api/workshop/index15.get.mjs.map +1 -0
  356. package/.output/server/chunks/routes/api/workshop/index3.get.mjs +24 -9
  357. package/.output/server/chunks/routes/api/workshop/index3.get.mjs.map +1 -1
  358. package/.output/server/chunks/routes/api/workshop/index3.post.mjs +1 -1
  359. package/.output/server/chunks/routes/api/workshop/index4.get.mjs +10 -4
  360. package/.output/server/chunks/routes/api/workshop/index4.get.mjs.map +1 -1
  361. package/.output/server/chunks/routes/api/workshop/index4.post.mjs +1 -1
  362. package/.output/server/chunks/routes/api/workshop/index5.get.mjs +4 -29
  363. package/.output/server/chunks/routes/api/workshop/index5.get.mjs.map +1 -1
  364. package/.output/server/chunks/routes/api/workshop/index5.post.mjs +1 -1
  365. package/.output/server/chunks/routes/api/workshop/index6.get.mjs +25 -22
  366. package/.output/server/chunks/routes/api/workshop/index6.get.mjs.map +1 -1
  367. package/.output/server/chunks/routes/api/workshop/index7.get.mjs +26 -5
  368. package/.output/server/chunks/routes/api/workshop/index7.get.mjs.map +1 -1
  369. package/.output/server/chunks/routes/api/workshop/index8.get.mjs +4 -39
  370. package/.output/server/chunks/routes/api/workshop/index8.get.mjs.map +1 -1
  371. package/.output/server/chunks/routes/api/workshop/index9.get.mjs +40 -20
  372. package/.output/server/chunks/routes/api/workshop/index9.get.mjs.map +1 -1
  373. package/.output/server/chunks/routes/api/workshop/plugins/_name/disable.post.mjs +1 -1
  374. package/.output/server/chunks/routes/api/workshop/plugins/_name/enable.post.mjs +1 -1
  375. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.delete.mjs +1 -1
  376. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.put.mjs +1 -1
  377. package/.output/server/chunks/routes/api/workshop/teams/_id/deploy.post.mjs +1 -1
  378. package/.output/server/chunks/routes/api/workshop/teams/_id/index.put.mjs +1 -1
  379. package/.output/server/chunks/routes/api/workshop/teams/_id/index2.get.mjs +1 -1
  380. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channel-templates/_tplId_.post.mjs +2 -2
  381. package/.output/server/chunks/routes/renderer.mjs +3 -3
  382. package/.output/server/chunks/virtual/entry.mjs +199 -468
  383. package/.output/server/chunks/virtual/precomputed.mjs +1 -1
  384. package/.output/server/package.json +1 -1
  385. package/README-zh.md +17 -0
  386. package/README.md +20 -0
  387. package/app/components/AppSidebar.vue +1 -0
  388. package/app/components/analysis/AnalysisEditModal.vue +192 -0
  389. package/app/components/analysis/AnalysisFilterCard.vue +159 -0
  390. package/app/components/analysis/AnalysisPageHead.vue +47 -0
  391. package/app/components/analysis/AnalysisTable.vue +322 -0
  392. package/app/composables/useRouteMeta.ts +1 -0
  393. package/app/config/schema.ts +1 -0
  394. package/app/pages/analysis/composables/useAnalysisFeed.ts +85 -0
  395. package/app/pages/analysis/index.vue +128 -0
  396. package/app/pages/analysis/types.ts +50 -0
  397. package/cli/commands/mcp.mjs +160 -160
  398. package/i18n/locales/en.ts +63 -0
  399. package/i18n/locales/zh-CN.ts +63 -0
  400. package/mcp/aw-mcp-server.mjs +799 -799
  401. package/package.json +2 -2
  402. package/scripts/onboarding/onboard.mjs +5 -2
  403. package/scripts/onboarding/sim-twin.mjs +312 -0
  404. package/server/api/workshop/analysis/[id].delete.ts +30 -0
  405. package/server/api/workshop/analysis/[id].get.ts +25 -0
  406. package/server/api/workshop/analysis/[id].patch.ts +100 -0
  407. package/server/api/workshop/analysis/index.get.ts +39 -0
  408. package/server/plugins/workshop.ts +4 -0
  409. package/server/repositories/user.repository.ts +2 -2
  410. package/server/services/workshop/agents/host-tool-bridge/catalog.ts +4 -1
  411. package/server/services/workshop/agents/host-tool-bridge/tools/industrial.ts +5 -2
  412. package/server/services/workshop/agents/industrial/analysis-tools.ts +242 -0
  413. package/server/services/workshop/agents/industrial/index.ts +1 -0
  414. package/server/services/workshop/agents/industrial/ops-tools.ts +3 -2
  415. package/server/services/workshop/analysis/analysis.repo.ts +241 -0
  416. package/server/services/workshop/db/database/migrations.ts +10 -0
  417. package/server/services/workshop/db/database/open.ts +3 -1
  418. package/server/services/workshop/db/database/schema.ts +32 -1
  419. package/server/services/workshop/db/ops.repo.ts +1 -1
  420. package/server/services/workshop/db/retention.ts +2 -0
  421. package/server/services/workshop/db/schema.sql +31 -0
  422. package/server/services/workshop/settings.ts +1 -0
  423. package/shared/config/schema.json +1 -0
  424. package/.output/public/_nuxt/B-Y_rsfn.js +0 -106
  425. package/.output/public/_nuxt/B02cxZz72.js +0 -1
  426. package/.output/public/_nuxt/BKHd_sKD2.js +0 -47
  427. package/.output/public/_nuxt/BikIgp9R.js +0 -1
  428. package/.output/public/_nuxt/BkGqyjWm.js +0 -3
  429. package/.output/public/_nuxt/Br2LgfbH2.js +0 -13
  430. package/.output/public/_nuxt/BrFF_9742.js +0 -1
  431. package/.output/public/_nuxt/BtYg4aGR2.js +0 -1
  432. package/.output/public/_nuxt/C4X_Z1lA.js +0 -1
  433. package/.output/public/_nuxt/CBATzTUf.js +0 -13
  434. package/.output/public/_nuxt/CEP4UrDv.js +0 -1
  435. package/.output/public/_nuxt/CIPKYgrH2.js +0 -1
  436. package/.output/public/_nuxt/CPSHP_EI.js +0 -1
  437. package/.output/public/_nuxt/CSyIwYcJ2.js +0 -1
  438. package/.output/public/_nuxt/CZkTlW93.js +0 -2
  439. package/.output/public/_nuxt/CZyYdpqZ2.js +0 -1
  440. package/.output/public/_nuxt/CeDkXWCz.js +0 -1
  441. package/.output/public/_nuxt/Cl19UD7U.js +0 -1
  442. package/.output/public/_nuxt/ClrkV0C4.js +0 -1
  443. package/.output/public/_nuxt/Cv_H1gOM2.js +0 -1
  444. package/.output/public/_nuxt/D5i2ofVw2.js +0 -1
  445. package/.output/public/_nuxt/D6XGn5vM.js +0 -2
  446. package/.output/public/_nuxt/D8VQGThE.js +0 -28
  447. package/.output/public/_nuxt/DBwuADr82.js +0 -1
  448. package/.output/public/_nuxt/DfqRQSFn.js +0 -19
  449. package/.output/public/_nuxt/DraEWn4N2.js +0 -1
  450. package/.output/public/_nuxt/DyMgrV29.js +0 -1
  451. package/.output/public/_nuxt/H7Rbu32y2.js +0 -1
  452. package/.output/public/_nuxt/YDs3mbQu2.js +0 -1
  453. package/.output/public/_nuxt/Z3MSTcdu2.js +0 -1
  454. package/.output/public/_nuxt/_vR_sc7t.js +0 -24
  455. package/.output/public/_nuxt/builds/meta/92fd7e2e-18f2-45c3-8588-d93004dda6e3.json +0 -1
  456. package/.output/public/_nuxt/gbaq2UOO.js +0 -1
  457. package/.output/public/_nuxt/o-G6YtmK2.js +0 -1
  458. package/.output/public/_nuxt/ylowSquM2.js +0 -1
  459. package/.output/server/chunks/build/agents-BTsbna5H.mjs.map +0 -1
  460. package/.output/server/chunks/build/channel-templates-BPKJ8e4l.mjs.map +0 -1
  461. package/.output/server/chunks/build/input-CobQ5LJ5.mjs.map +0 -1
  462. package/.output/server/chunks/build/permissions-D6mQw_9j.mjs.map +0 -1
  463. package/.output/server/chunks/build/settings-Cl_KRyEn.mjs.map +0 -1
  464. package/.output/server/chunks/build/teams-CGDZHaQl.mjs.map +0 -1
  465. package/.output/server/chunks/build/tokens-BOYkZuoB.mjs.map +0 -1
  466. package/.output/server/chunks/build/users-B_pHStEa.mjs.map +0 -1
  467. package/.output/server/chunks/build/workshop-C0DefygA.mjs.map +0 -1
  468. package/scripts/_audit/.tmp/audit-data/dcw-params.json +0 -15
  469. package/scripts/_audit/.tmp/audit-data/dcws.json +0 -30
  470. package/scripts/_audit/aml-layout-diag.mjs +0 -83
  471. package/scripts/_audit/channel-inspect.mjs +0 -49
  472. package/scripts/_audit/cleanup-apply.mjs +0 -89
  473. package/scripts/_audit/cleanup-plan.mjs +0 -82
  474. package/scripts/_audit/contrast-check.mjs +0 -43
  475. package/scripts/_audit/dcw-controller-e2e.ts +0 -106
  476. package/scripts/_audit/dcw-flush-cost.ts +0 -43
  477. package/scripts/_audit/dcw-rollback-ledger.ts +0 -156
  478. package/scripts/_audit/dcw-unrecorded-write.ts +0 -171
  479. package/scripts/_audit/dcw-write-mutex.ts +0 -157
  480. package/scripts/_audit/design-shots.mjs +0 -145
  481. package/scripts/_audit/docs-font-probe.mjs +0 -68
  482. package/scripts/_audit/docs-probe.mjs +0 -107
  483. package/scripts/_audit/docs-shots.mjs +0 -171
  484. package/scripts/_audit/docs-v3-verify.mjs +0 -255
  485. package/scripts/_audit/docs-vue-lint.mjs +0 -81
  486. package/scripts/_audit/docs-vue-lint2.mjs +0 -91
  487. package/scripts/_audit/exp-cost-scaling.mjs +0 -57
  488. package/scripts/_audit/exp-envelope-and-png.mjs +0 -78
  489. package/scripts/_audit/exp-png-decode.mjs +0 -67
  490. package/scripts/_audit/exp-retention-plan.mjs +0 -61
  491. package/scripts/_audit/exp-retention-rescan.mjs +0 -42
  492. package/scripts/_audit/exp-sweep-fairness.mjs +0 -50
  493. package/scripts/_audit/feature-audit-e2e.mjs +0 -342
  494. package/scripts/_audit/fix-settings-count.mjs +0 -57
  495. package/scripts/_audit/full-e2e-adopt.mjs +0 -238
  496. package/scripts/_audit/full-e2e-close-loop.mjs +0 -134
  497. package/scripts/_audit/full-e2e-retrain.mjs +0 -320
  498. package/scripts/_audit/full-e2e-supplement.mjs +0 -192
  499. package/scripts/_audit/full-e2e-ui-final.mjs +0 -111
  500. package/scripts/_audit/full-e2e-ui-mount.mjs +0 -111
  501. package/scripts/_audit/full-feature-e2e-20260927.mjs +0 -627
  502. package/scripts/_audit/glass-verify.mjs +0 -155
  503. package/scripts/_audit/hydration-diff.mjs +0 -104
  504. package/scripts/_audit/hydration-head.mjs +0 -36
  505. package/scripts/_audit/hydration-probe.mjs +0 -59
  506. package/scripts/_audit/idd-scenarios-e2e.mjs +0 -239
  507. package/scripts/_audit/kb-diag-complete.mjs +0 -261
  508. package/scripts/_audit/kb-diag-complete2.mjs +0 -271
  509. package/scripts/_audit/kb-diag-loop-e2e.mjs +0 -357
  510. package/scripts/_audit/kb-diag-loop-mock.mjs +0 -416
  511. package/scripts/_audit/kb-diag-loop-v2.mjs +0 -314
  512. package/scripts/_audit/lead-matrix-test.mjs +0 -172
  513. package/scripts/_audit/plc-agent-task.mjs +0 -74
  514. package/scripts/_audit/plc-clean-scenario.mjs +0 -434
  515. package/scripts/_audit/plc-clean-shots.mjs +0 -161
  516. package/scripts/_audit/plc-fc10-probe.mjs +0 -30
  517. package/scripts/_audit/probe-binding.mjs +0 -114
  518. package/scripts/_audit/recipe-save-e2e.mjs +0 -365
  519. package/scripts/_audit/review-fix-verify.mjs +0 -158
  520. package/scripts/_audit/runtime-dir-e2e.mjs +0 -393
  521. package/scripts/_audit/town-focus-shot.mjs +0 -129
  522. package/scripts/_audit/town-reposition.mjs +0 -85
  523. package/scripts/_audit/verify-cleanup.mjs +0 -67
  524. package/scripts/_audit/verify-data-integrity.mjs +0 -112
  525. package/scripts/_audit/watchdog-recovery-test.mjs +0 -149
  526. package/scripts/_dbg-optloop-ui-shots.mjs +0 -52
  527. /package/.output/public/_nuxt/{4RTUlYvj2.js → 4RTUlYvj.js} +0 -0
  528. /package/.output/public/_nuxt/{BBhLVYdM.js → BBhLVYdM2.js} +0 -0
  529. /package/.output/public/_nuxt/{BG7XSX-S2.js → BG7XSX-S.js} +0 -0
  530. /package/.output/public/_nuxt/{BU7WuuKh.js → BU7WuuKh2.js} +0 -0
  531. /package/.output/public/_nuxt/{BrRX-l9B2.js → BrRX-l9B.js} +0 -0
  532. /package/.output/public/_nuxt/{CHyzK5m52.js → CHyzK5m5.js} +0 -0
  533. /package/.output/public/_nuxt/{Ckafrjnw2.js → Ckafrjnw.js} +0 -0
  534. /package/.output/public/_nuxt/{D1Xw30Dj2.js → D1Xw30Dj.js} +0 -0
  535. /package/.output/public/_nuxt/{DEhjFhZ2.js → DEhjFhZ22.js} +0 -0
  536. /package/.output/public/_nuxt/{DdNujZN5.js → DdNujZN52.js} +0 -0
  537. /package/.output/public/_nuxt/{DzwIZ81f.js → DzwIZ81f2.js} +0 -0
  538. /package/.output/public/_nuxt/{M6NcguDO.js → M6NcguDO2.js} +0 -0
  539. /package/.output/public/_nuxt/{MW-V7IIP2.js → MW-V7IIP.js} +0 -0
  540. /package/.output/public/_nuxt/{WmMwIS4y.js → WmMwIS4y2.js} +0 -0
  541. /package/.output/public/_nuxt/{qIQFsHtF.js → qIQFsHtF2.js} +0 -0
@@ -1,81 +0,0 @@
1
- /**
2
- * docs-vue-lint.mjs —— 找出 VitePress「Element is missing end tag」的真实来源行
3
- * ------------------------------------------------------------
4
- * VitePress 报的行列号是**生成代码**里的位置,对不上源文件,人工排查很费时。
5
- * 这里改用逐行二分:把 markdown 的正文按行累加交给 @vue/compiler-dom 编译,
6
- * 第一次编译失败的那一行就是罪魁。行内代码/围栏代码先剥掉(markdown-it 会转义它们)。
7
- *
8
- * 用法:node scripts/_audit/docs-vue-lint.mjs docs/site/plugins/guide.md [更多文件...]
9
- */
10
- import { existsSync, readFileSync } from 'node:fs'
11
- import { dirname, join, resolve } from 'node:path'
12
- import { fileURLToPath, pathToFileURL } from 'node:url'
13
-
14
- const HERE = dirname(fileURLToPath(import.meta.url))
15
- const ROOT = resolve(HERE, '..', '..')
16
-
17
- const compilerEntry = join(ROOT, 'docs', 'site', 'node_modules', '@vue', 'compiler-dom', 'dist', 'compiler-dom.cjs.js')
18
- if (!existsSync(compilerEntry)) {
19
- console.error('✖ 未找到 @vue/compiler-dom(需先 cd docs/site && npm i)')
20
- process.exit(2)
21
- }
22
- const { compile } = await import(pathToFileURL(compilerEntry).href)
23
-
24
- /** 粗略还原 markdown-it 的输出:去掉围栏与行内代码,保留其余原样 */
25
- function toTemplateSource(md) {
26
- const noFm = md.replace(/^---\n[\s\S]*?\n---\n/, '')
27
- const out = []
28
- let inFence = false
29
- for (const line of noFm.split('\n')) {
30
- if (/^\s*```/.test(line)) {
31
- inFence = !inFence
32
- out.push('')
33
- continue
34
- }
35
- if (inFence) {
36
- out.push('')
37
- continue
38
- }
39
- // 行内代码 → 替换为等长占位,保持列号大致可用
40
- out.push(line.replace(/`[^`\n]*`/g, m => 'x'.repeat(m.length)))
41
- }
42
- return out
43
- }
44
-
45
- const files = process.argv.slice(2)
46
- if (!files.length) {
47
- console.error('用法:node scripts/_audit/docs-vue-lint.mjs <markdown> [更多]')
48
- process.exit(2)
49
- }
50
-
51
- let bad = 0
52
- for (const rel of files) {
53
- const p = resolve(ROOT, rel)
54
- if (!existsSync(p)) {
55
- console.log(`· ${rel} 不存在,跳过`)
56
- continue
57
- }
58
- const lines = toTemplateSource(readFileSync(p, 'utf8'))
59
- let firstBad = -1
60
- let message = ''
61
- for (let i = 1; i <= lines.length; i++) {
62
- const chunk = lines.slice(0, i).join('\n')
63
- try {
64
- compile(chunk, { onError: (e) => { throw e } })
65
- }
66
- catch (err) {
67
- firstBad = i
68
- message = err?.message ?? String(err)
69
- break
70
- }
71
- }
72
- if (firstBad === -1) {
73
- console.log(`✔ ${rel} 模板可编译(${lines.length} 行)`)
74
- continue
75
- }
76
- bad++
77
- console.log(`✖ ${rel}:${firstBad} → ${message}`)
78
- console.log(` ${JSON.stringify(lines[firstBad - 1].slice(0, 160))}`)
79
- }
80
-
81
- process.exit(bad ? 1 : 0)
@@ -1,91 +0,0 @@
1
- /**
2
- * docs-vue-lint2.mjs —— 用 VitePress 真实的 markdown 管线定位「Element is missing end tag」
3
- * ------------------------------------------------------------
4
- * 第一版(docs-vue-lint.mjs)只做逐行近似,漏掉了 markdown-it 才会做的转换
5
- * (自动链接、HTML 块、`~` 围栏、属性里的尖括号等)。这里改成:
6
- * md --(vitepress createMarkdownRenderer)--> html --(@vue/compiler-dom)--> 报错
7
- * 再从 HTML 片段里回找源文件里对应的那一行。
8
- *
9
- * 用法:node scripts/_audit/docs-vue-lint2.mjs docs/site/plugins/guide.md
10
- */
11
- import { existsSync, readFileSync } from 'node:fs'
12
- import { dirname, join, resolve } from 'node:path'
13
- import { fileURLToPath, pathToFileURL } from 'node:url'
14
-
15
- const HERE = dirname(fileURLToPath(import.meta.url))
16
- const ROOT = resolve(HERE, '..', '..')
17
- const SITE = join(ROOT, 'docs', 'site')
18
-
19
- const { createMarkdownRenderer } = await import(pathToFileURL(join(SITE, 'node_modules', 'vitepress', 'dist', 'node', 'index.js')).href)
20
- const { compile } = await import(pathToFileURL(join(SITE, 'node_modules', '@vue', 'compiler-dom', 'dist', 'compiler-dom.cjs.js')).href)
21
-
22
- const md = await createMarkdownRenderer(SITE, {}, '/AgentWorkShop/')
23
-
24
- const files = process.argv.slice(2)
25
- if (!files.length) {
26
- console.error('用法:node scripts/_audit/docs-vue-lint2.mjs <markdown> [更多]')
27
- process.exit(2)
28
- }
29
-
30
- /** 从 HTML 里摘出「最像未闭合标签」的片段,用于回找源行 */
31
- function suspects(html) {
32
- const out = new Set()
33
- const re = /<\/?([a-zA-Z][\w-]*)(\s[^>]*)?\/?>/g
34
- const KNOWN = new Set(['div', 'span', 'p', 'a', 'b', 'i', 'em', 'strong', 'code', 'pre', 'br', 'img', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'ul', 'ol', 'li', 'table', 'thead', 'tbody', 'tr', 'th', 'td', 'blockquote', 'hr', 'details', 'summary', 'kbd', 'sub', 'sup', 'figure', 'figcaption', 'input', 'section', 'picture', 'source', 'video', 'small'])
35
- let m
36
- while ((m = re.exec(html)) !== null) {
37
- const tag = m[1]
38
- if (KNOWN.has(tag) || tag.includes('-')) continue
39
- out.add(m[0])
40
- }
41
- return [...out]
42
- }
43
-
44
- let failed = 0
45
- for (const rel of files) {
46
- const p = resolve(ROOT, rel)
47
- if (!existsSync(p)) {
48
- console.log(`· ${rel} 不存在,跳过`)
49
- continue
50
- }
51
- const src = readFileSync(p, 'utf8')
52
- const html = md.render(src, { path: rel, relativePath: rel })
53
- let err = null
54
- try {
55
- compile(html, { onError: (e) => { throw e } })
56
- }
57
- catch (e) {
58
- err = e
59
- }
60
- if (!err) {
61
- console.log(`✔ ${rel} 真实管线可编译`)
62
- continue
63
- }
64
- failed++
65
- console.log(`✖ ${rel} → ${err.message}`)
66
- const list = suspects(html)
67
- if (!list.length) {
68
- console.log(' HTML 里没找到可疑自定义标签;可能是属性值/注释里的尖括号')
69
- }
70
- for (const s of list) {
71
- // 在源码里搜同一片段(可能被 markdown-it 原样透传)
72
- const srcLines = src.split('\n')
73
- const hit = srcLines.findIndex(l => l.includes(s))
74
- console.log(` 可疑: ${JSON.stringify(s)} → 源文件第 ${hit === -1 ? '?' : hit + 1} 行`)
75
- if (hit >= 0) console.log(` ${JSON.stringify(srcLines[hit].trim().slice(0, 140))}`)
76
- }
77
- // 若 HTML 里没有自定义标签,打印错误位置附近的 HTML 片段辅助定位
78
- if (!list.length) {
79
- const m = /\((\d+):(\d+)\)/.exec(err.message)
80
- if (m) {
81
- const lines = html.split('\n')
82
- const ln = Number(m[1])
83
- console.log(` HTML 第 ${ln} 行附近:`)
84
- for (let i = Math.max(0, ln - 2); i < Math.min(lines.length, ln + 1); i++) {
85
- console.log(` ${i + 1}| ${lines[i].slice(0, 160)}`)
86
- }
87
- }
88
- }
89
- }
90
-
91
- process.exit(failed ? 1 : 0)
@@ -1,57 +0,0 @@
1
- /**
2
- * 审计实验 2:
3
- * A. SQLite 保留期批量 DELETE 的耗时随表规模线性增长(全扫 → 每批一次全扫)
4
- * B. InProcQueueAdapter.publish 溢出时 queue.shift() 的 O(n) 代价(10k 容量)
5
- * 运行:node scripts/_audit/exp-cost-scaling.mjs
6
- */
7
- import { DatabaseSync } from 'node:sqlite'
8
- import { mkdtempSync } from 'node:fs'
9
- import { tmpdir } from 'node:os'
10
- import { join } from 'node:path'
11
-
12
- // ---------- A ----------
13
- function build(nodes, perNode) {
14
- const dir = mkdtempSync(join(tmpdir(), 'daq-audit-'))
15
- const db = new DatabaseSync(join(dir, 'ts.sqlite'))
16
- db.exec('PRAGMA journal_mode = WAL')
17
- db.exec(`CREATE TABLE daq_samples (node_id TEXT NOT NULL, ts_ms INTEGER NOT NULL, value REAL NOT NULL,
18
- state TEXT NOT NULL DEFAULT 'ok', line_id TEXT, product_id TEXT, recipe_id TEXT, run_id TEXT,
19
- PRIMARY KEY (node_id, ts_ms));
20
- CREATE INDEX idx_daq_node_ts ON daq_samples (node_id, ts_ms DESC);`)
21
- const ins = db.prepare('INSERT OR IGNORE INTO daq_samples (node_id, ts_ms, value) VALUES (?,?,?)')
22
- const now = Date.now()
23
- db.exec('BEGIN')
24
- for (let n = 0; n < nodes; n++) for (let i = 0; i < perNode; i++) ins.run(`dn-${n}`, now - i * 1000, i)
25
- db.exec('COMMIT')
26
- return { db, now }
27
- }
28
-
29
- const DEL = 'DELETE FROM daq_samples WHERE rowid IN (SELECT rowid FROM daq_samples WHERE ts_ms < ? LIMIT 5000)'
30
- for (const [nodes, perNode] of [[1, 50_000], [10, 50_000], [40, 50_000]]) {
31
- const { db, now } = build(nodes, perNode)
32
- const rows = db.prepare('SELECT COUNT(*) AS c FROM daq_samples').get().c
33
- const cutoff = now - 3600_000 // 1h 保留
34
- const t0 = performance.now()
35
- const r = db.prepare(DEL).run(cutoff)
36
- const ms = performance.now() - t0
37
- console.log(`A: rows=${String(rows).padStart(8)} one 5000-row batch DELETE = ${ms.toFixed(1)}ms (deleted ${r.changes})`)
38
- db.close()
39
- }
40
-
41
- // ---------- B ----------
42
- const QUEUE_CAP = 10_000
43
- const q = []
44
- let dropped = 0
45
- const t1 = performance.now()
46
- for (let i = 0; i < 200_000; i++) {
47
- if (q.length >= QUEUE_CAP) {
48
- q.shift()
49
- dropped++
50
- } // inproc.adapter.ts:35
51
- q.push({ nodeId: 'n', value: i })
52
- }
53
- console.log(`B: 200k publish into cap-${QUEUE_CAP} inproc queue = ${(performance.now() - t1).toFixed(1)}ms (dropped ${dropped})`)
54
- const q2 = []
55
- const t2 = performance.now()
56
- for (let i = 0; i < 200_000; i++) if (q2.length < QUEUE_CAP) q2.push(i)
57
- console.log(`B: same loop without shift (push-only baseline) = ${(performance.now() - t2).toFixed(1)}ms`)
@@ -1,78 +0,0 @@
1
- /**
2
- * 审计实验 4:
3
- * A. 队列信封未校验:NaN(坏 at)/字符串 value 落 SQLite 的后果(整批事务是否被毒化)
4
- * B. mock ccd-image 帧的 PNG 体积(评估对象存储无删除策略的增长速率)
5
- * 运行:node scripts/_audit/exp-envelope-and-png.mjs
6
- */
7
- import { DatabaseSync } from 'node:sqlite'
8
- import { deflateSync } from 'node:zlib'
9
-
10
- // ---------- A ----------
11
- const db = new DatabaseSync(':memory:')
12
- db.exec(`CREATE TABLE daq_samples (node_id TEXT NOT NULL, ts_ms INTEGER NOT NULL, value REAL NOT NULL,
13
- state TEXT NOT NULL DEFAULT 'ok', line_id TEXT, product_id TEXT, recipe_id TEXT, run_id TEXT,
14
- PRIMARY KEY (node_id, ts_ms));`)
15
- const ins = db.prepare('INSERT OR IGNORE INTO daq_samples (node_id, ts_ms, value, state, line_id, product_id, recipe_id, run_id) VALUES (?,?,?,?,?,?,?,?)')
16
-
17
- console.log('--- A1: tsMs = NaN (Date.parse("garbage")) ---')
18
- try {
19
- db.exec('BEGIN')
20
- ins.run('dn-a', Date.parse('garbage'), 1.5, 'ok', null, null, null, null)
21
- ins.run('dn-b', Date.now(), 2.5, 'ok', null, null, null, null)
22
- db.exec('COMMIT')
23
- console.log(' batch COMMITTED — rows:', db.prepare('SELECT COUNT(*) c FROM daq_samples').get().c)
24
- }
25
- catch (err) {
26
- console.log(' batch FAILED (whole transaction rolls back):', err.message)
27
- try { db.exec('ROLLBACK') }
28
- catch {}
29
- console.log(' rows after failure:', db.prepare('SELECT COUNT(*) c FROM daq_samples').get().c)
30
- }
31
-
32
- console.log('--- A2: value = "abc" (string) into REAL NOT NULL ---')
33
- try {
34
- ins.run('dn-c', Date.now() + 1, 'abc', 'ok', null, null, null, null)
35
- const row = db.prepare('SELECT value, typeof(value) t FROM daq_samples WHERE node_id = ?').get('dn-c')
36
- console.log(` stored value=${JSON.stringify(row.value)} sqlite typeof=${row.t}`)
37
- }
38
- catch (err) { console.log(' rejected:', err.message) }
39
-
40
- console.log('--- A3: Date.parse(NaN 分支) 对乱序防御的影响 ---')
41
- let lastIngestAt = 0
42
- const ts = Date.parse('garbage')
43
- if (ts && ts <= lastIngestAt) console.log(' late'); else { lastIngestAt = ts; console.log(` accepted; lastIngestAt=${lastIngestAt}`) }
44
- console.log(` next frame compare (1000 <= NaN) = ${1000 <= lastIngestAt} → 永不判 late`)
45
-
46
- // ---------- B:mock ccd-image 帧体积(png-enc.ts 同款编码) ----------
47
- const CRC_TABLE = (() => { const t = new Uint32Array(256); for (let n = 0; n < 256; n++) { let c = n; for (let k = 0; k < 8; k++) c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1; t[n] = c >>> 0 } return t })()
48
- function crc32(buf) { let c = 0xffffffff; for (let i = 0; i < buf.length; i++) c = CRC_TABLE[(c ^ buf[i]) & 0xff] ^ (c >>> 8); return (c ^ 0xffffffff) >>> 0 }
49
- function chunk(type, data) { const len = Buffer.alloc(4); len.writeUInt32BE(data.length); const body = Buffer.concat([Buffer.from(type, 'ascii'), data]); const crc = Buffer.alloc(4); crc.writeUInt32BE(crc32(body)); return Buffer.concat([len, body, crc]) }
50
- function encodePng(width, height, pixels) {
51
- const stride = width
52
- const raw = Buffer.alloc((stride + 1) * height)
53
- for (let y = 0; y < height; y++) { raw[y * (stride + 1)] = 0; pixels.subarray(y * stride, (y + 1) * stride).forEach((v, i) => { raw[y * (stride + 1) + 1 + i] = v }) }
54
- const ihdr = Buffer.alloc(13); ihdr.writeUInt32BE(width, 0); ihdr.writeUInt32BE(height, 4); ihdr[8] = 8; ihdr[9] = 0
55
- return Buffer.concat([Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]), chunk('IHDR', ihdr), chunk('IDAT', deflateSync(raw, { level: 6 })), chunk('IEND', Buffer.alloc(0))])
56
- }
57
- // mockImageSample:320x240 灰度,纹理+噪声+暗斑
58
- const w = 320, h = 240, px = new Uint8Array(w * h), baseGray = 128
59
- for (let y = 0; y < h; y++) for (let x = 0; x < w; x++) {
60
- let v = baseGray + Math.sin(x * 0.35) * 8 + Math.sin(y * 0.22 + 1.7) * 6 + (Math.random() - 0.5) * 10
61
- const dx = x - 160, dy = y - 120, d2 = dx * dx + dy * dy
62
- if (d2 < 400) v -= (1 - d2 / 400) * 90
63
- px[y * w + x] = Math.max(0, Math.min(255, Math.round(v)))
64
- }
65
- const t0 = performance.now()
66
- const png = encodePng(w, h, px)
67
- const enc = performance.now() - t0
68
- // thumbnail(width=256) → 256x192
69
- const tw = 256, th = Math.round(h * tw / w), small = new Uint8Array(tw * th)
70
- for (let y = 0; y < th; y++) for (let x = 0; x < tw; x++) small[y * tw + x] = px[Math.min(h - 1, Math.floor(y * h / th)) * w + Math.min(w - 1, Math.floor(x * w / tw))]
71
- const t1 = performance.now()
72
- const thumb = encodePng(tw, th, small)
73
- const encT = performance.now() - t1
74
- console.log(`\n--- B: ccd-image 帧体积(ccd-image 模板:thumbnail width=256)---`)
75
- console.log(` main ${w}x${h} = ${(png.length / 1024).toFixed(1)} KB (encode ${enc.toFixed(1)}ms, deflateSync 同步阻塞)`)
76
- console.log(` thumb ${tw}x${th} = ${(thumb.length / 1024).toFixed(1)} KB (encode ${encT.toFixed(1)}ms)`)
77
- console.log(` 合计 ${((png.length + thumb.length) / 1024).toFixed(1)} KB/帧 → @1fps/节点 = ${(((png.length + thumb.length) / 1048576) * 86400).toFixed(2)} GB/天/节点`)
78
- db.close()
@@ -1,67 +0,0 @@
1
- /**
2
- * 审计实验 5:frames.ts decodeGrayPng 对「非本仓编码器」PNG 的解码正确性。
3
- * 复刻 decodeGrayPng(frames.ts:144-166)与 quality-gate/thumbnail 的调用方式,
4
- * 用标准 PNG(filter 类型 2 = Up,真实相机/编码器常见)验证像素是否被正确还原。
5
- * 运行:node scripts/_audit/exp-png-decode.mjs
6
- */
7
- import { deflateSync, inflateSync } from 'node:zlib'
8
-
9
- const W = 8, H = 4
10
- // 真实像素:每行一个常量阶跃(便于肉眼比对)
11
- const truth = new Uint8Array(W * H)
12
- for (let y = 0; y < H; y++) for (let x = 0; x < W; x++) truth[y * W + x] = 50 + y * 40
13
-
14
- /** 按 PNG 规范生成「filter type 2 (Up)」灰度 8bit PNG */
15
- function encodePngFilterUp(w, h, px) {
16
- const raw = Buffer.alloc((w + 1) * h)
17
- let prev = new Uint8Array(w)
18
- for (let y = 0; y < h; y++) {
19
- const row = px.subarray(y * w, (y + 1) * w)
20
- raw[y * (w + 1)] = 2 // filter type 2 = Up
21
- for (let x = 0; x < w; x++) raw[y * (w + 1) + 1 + x] = (row[x] - prev[x]) & 0xff // up-filtered
22
- prev = row
23
- }
24
- const chunks = [Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a])]
25
- const ihdr = Buffer.alloc(13)
26
- ihdr.writeUInt32BE(w, 0); ihdr.writeUInt32BE(h, 4); ihdr[8] = 8; ihdr[9] = 0
27
- const crcTable = (() => { const t = new Uint32Array(256); for (let n = 0; n < 256; n++) { let c = n; for (let k = 0; k < 8; k++) c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1; t[n] = c >>> 0 } return t })()
28
- const crc32 = (b) => { let c = 0xffffffff; for (let i = 0; i < b.length; i++) c = crcTable[(c ^ b[i]) & 0xff] ^ (c >>> 8); return (c ^ 0xffffffff) >>> 0 }
29
- const chunk = (type, data) => { const l = Buffer.alloc(4); l.writeUInt32BE(data.length); const body = Buffer.concat([Buffer.from(type, 'ascii'), data]); const c = Buffer.alloc(4); c.writeUInt32BE(crc32(body)); return Buffer.concat([l, body, c]) }
30
- chunks.push(chunk('IHDR', ihdr), chunk('IDAT', deflateSync(raw, { level: 6 })), chunk('IEND', Buffer.alloc(0)))
31
- return Buffer.concat(chunks)
32
- }
33
-
34
- // —— frames.ts:144-166 的逐行复刻(只跳过 filter 字节,不做反滤波) ——
35
- function decodeGrayPng(blob, w, h) {
36
- try {
37
- let off = 8
38
- const idat = []
39
- while (off + 8 <= blob.length) {
40
- const len = blob.readUInt32BE(off)
41
- const type = blob.subarray(off + 4, off + 8).toString('ascii')
42
- if (type === 'IDAT') idat.push(blob.subarray(off + 8, off + 8 + len))
43
- off += 12 + len
44
- }
45
- if (idat.length === 0) return null
46
- const raw = inflateSync(Buffer.concat(idat))
47
- const stride = w + 1
48
- if (raw.length < stride * h) return null
49
- const out = new Uint8Array(w * h)
50
- for (let y = 0; y < h; y++) out.set(raw.subarray(y * stride + 1, y * stride + 1 + w), y * w)
51
- return out
52
- }
53
- catch { return null }
54
- }
55
-
56
- const png = encodePngFilterUp(W, H, truth)
57
- const decoded = decodeGrayPng(png, W, H)
58
- console.log('PNG bytes:', png.length, '| decodeGrayPng returned:', decoded ? 'pixels (non-null)' : 'null')
59
- console.log('truth :', Array.from(truth).join(','))
60
- console.log('decoded :', decoded ? Array.from(decoded).join(',') : 'null')
61
- if (decoded) {
62
- let maxErr = 0, sum = 0
63
- for (let i = 0; i < truth.length; i++) { maxErr = Math.max(maxErr, Math.abs(truth[i] - decoded[i])); sum += decoded[i] }
64
- console.log(`maxErr=${maxErr} truthBrightness=${(Array.from(truth).reduce((a, b) => a + b, 0) / truth.length).toFixed(1)} decodedBrightness=${(sum / decoded.length).toFixed(1)}`)
65
- }
66
- // JPEG 情形:无 IDAT → null
67
- console.log('JPEG-like (no IDAT) →', decodeGrayPng(Buffer.from([0xff, 0xd8, 0xff, 0xe0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), W, H))
@@ -1,61 +0,0 @@
1
- /**
2
- * 审计实验:复刻 SqliteTimeSeriesAdapter 的建表 + 保留期清理 SQL,
3
- * 用 EXPLAIN QUERY PLAN + 计时证明「保留期 DELETE 走全表扫描」。
4
- * 运行:node scripts/_audit/exp-retention-plan.mjs
5
- */
6
- import { DatabaseSync } from 'node:sqlite'
7
- import { mkdtempSync } from 'node:fs'
8
- import { tmpdir } from 'node:os'
9
- import { join } from 'node:path'
10
-
11
- const dir = mkdtempSync(join(tmpdir(), 'daq-audit-'))
12
- const db = new DatabaseSync(join(dir, 'ts.sqlite'))
13
- db.exec('PRAGMA journal_mode = WAL')
14
-
15
- // —— 与 sqlite.adapter.ts:35-73 同构的 DDL ——
16
- db.exec(`
17
- CREATE TABLE IF NOT EXISTS daq_samples (
18
- node_id TEXT NOT NULL, ts_ms INTEGER NOT NULL, value REAL NOT NULL,
19
- state TEXT NOT NULL DEFAULT 'ok', line_id TEXT, product_id TEXT, recipe_id TEXT, run_id TEXT,
20
- PRIMARY KEY (node_id, ts_ms)
21
- );
22
- CREATE INDEX IF NOT EXISTS idx_daq_node_ts ON daq_samples (node_id, ts_ms DESC);
23
- CREATE TABLE IF NOT EXISTS daq_frames (
24
- node_id TEXT NOT NULL, ts_ms INTEGER NOT NULL, kind TEXT NOT NULL, template_key TEXT,
25
- device_binding_id TEXT, line_id TEXT, product_id TEXT, recipe_id TEXT, run_id TEXT,
26
- points INTEGER NOT NULL DEFAULT 0, meta TEXT NOT NULL DEFAULT '{}', metrics TEXT NOT NULL DEFAULT '{}',
27
- PRIMARY KEY (node_id, ts_ms)
28
- );
29
- CREATE INDEX IF NOT EXISTS idx_daq_frames_node_ts ON daq_frames (node_id, ts_ms DESC);
30
- `)
31
-
32
- const NODES = 50
33
- const PER_NODE = 4000 // 200k rows total
34
- const now = Date.now()
35
- const ins = db.prepare('INSERT OR IGNORE INTO daq_samples (node_id, ts_ms, value, state) VALUES (?,?,?,?)')
36
- db.exec('BEGIN')
37
- for (let n = 0; n < NODES; n++) {
38
- for (let i = 0; i < PER_NODE; i++) ins.run(`dn-${n}`, now - i * 1000, n + i / 1000, 'ok')
39
- }
40
- db.exec('COMMIT')
41
- const total = db.prepare('SELECT COUNT(*) AS c FROM daq_samples').get().c
42
- console.log(`rows=${total}`)
43
-
44
- const cutoff = now - 168 * 3600_000 // tsRetentionH 缺省 168h
45
- const sql = 'DELETE FROM daq_samples WHERE rowid IN (SELECT rowid FROM daq_samples WHERE ts_ms < ? LIMIT 5000)'
46
- console.log('\n--- EXPLAIN QUERY PLAN (retention DELETE, sqlite.adapter.ts:94) ---')
47
- for (const r of db.prepare(`EXPLAIN QUERY PLAN ${sql}`).all(cutoff)) console.log(r.detail)
48
-
49
- console.log('\n--- EXPLAIN QUERY PLAN (frame retention DELETE, sqlite.adapter.ts:280) ---')
50
- for (const r of db.prepare('EXPLAIN QUERY PLAN DELETE FROM daq_frames WHERE ts_ms < ?').all(cutoff)) console.log(r.detail)
51
-
52
- console.log('\n--- timing ---')
53
- const t0 = Date.now()
54
- let removed = 0
55
- for (;;) {
56
- const r = db.prepare(sql).run(cutoff)
57
- removed += Number(r.changes)
58
- if (Number(r.changes) < 5000) break
59
- }
60
- console.log(`sweep deleted ${removed} rows in ${Date.now() - t0}ms`)
61
- db.close()
@@ -1,42 +0,0 @@
1
- /**
2
- * 审计实验 3:保留期 DELETE 的「每批从索引头重扫」代价。
3
- * 索引 = (node_id, ts_ms DESC) —— 同一节点内「新的在前、旧的在后」,
4
- * 因此删除最旧的行必须先走完整段未过期行。批数 = ceil(过期行/5000),
5
- * 每批都从索引头重新开始 → 总代价 ≈ 批数 × 每节点未过期行数。
6
- * 运行:node scripts/_audit/exp-retention-rescan.mjs
7
- */
8
- import { DatabaseSync } from 'node:sqlite'
9
- import { mkdtempSync } from 'node:fs'
10
- import { tmpdir } from 'node:os'
11
- import { join } from 'node:path'
12
-
13
- function build(nodes, perNode) {
14
- const dir = mkdtempSync(join(tmpdir(), 'daq-audit-'))
15
- const db = new DatabaseSync(join(dir, 'ts.sqlite'))
16
- db.exec('PRAGMA journal_mode = WAL')
17
- db.exec(`CREATE TABLE daq_samples (node_id TEXT NOT NULL, ts_ms INTEGER NOT NULL, value REAL NOT NULL,
18
- state TEXT NOT NULL DEFAULT 'ok', PRIMARY KEY (node_id, ts_ms));
19
- CREATE INDEX idx_daq_node_ts ON daq_samples (node_id, ts_ms DESC);`)
20
- const ins = db.prepare('INSERT OR IGNORE INTO daq_samples (node_id, ts_ms, value) VALUES (?,?,?)')
21
- const now = Date.now()
22
- db.exec('BEGIN')
23
- for (let n = 0; n < nodes; n++) for (let i = 0; i < perNode; i++) ins.run(`dn-${n}`, now - i * 1000, i)
24
- db.exec('COMMIT')
25
- return { db, now }
26
- }
27
-
28
- const DEL = 'DELETE FROM daq_samples WHERE rowid IN (SELECT rowid FROM daq_samples WHERE ts_ms < ? LIMIT 5000)'
29
-
30
- // 场景:每节点 200k 行(≈55h),仅最旧 ~2% 过期 → 过期行数 < 5000(单批即收敛)
31
- for (const nodes of [1, 10, 40]) {
32
- const perNode = 200_000
33
- const { db, now } = build(nodes, perNode)
34
- const total = db.prepare('SELECT COUNT(*) AS c FROM daq_samples').get().c
35
- const cutoff = now - (perNode - 4000) * 1000 // 只让最旧 4000 行过期
36
- const expired = db.prepare('SELECT COUNT(*) AS c FROM daq_samples WHERE ts_ms < ?').get(cutoff).c
37
- const t0 = performance.now()
38
- const r = db.prepare(DEL).run(cutoff)
39
- const ms = performance.now() - t0
40
- console.log(`nodes=${String(nodes).padStart(3)} rows=${total} expired=${expired} → single batch DELETE ${ms.toFixed(1)}ms (deleted ${r.changes})`)
41
- db.close()
42
- }
@@ -1,50 +0,0 @@
1
- /**
2
- * 审计实验 6:SWEEP_MAX_CONCURRENCY=8 下 N=50 节点的公平性/吞吐模拟。
3
- * 逐行复刻 daq-controller.ts:464-482 的 sweep 循环语义:
4
- * - 每 250ms 一拍;budget = 8 - inFlight;按 Map 插入序扫描;
5
- * - 未到期(now < lastSampleAt + interval)continue;到期则启动并计入 budget;
6
- * - started >= budget 立即 break(尾部节点本拍不再考虑);
7
- * - lastSampleAt = 采样完成时刻(本模拟按瞬时完成,乐观假设)。
8
- * 运行:node scripts/_audit/exp-sweep-fairness.mjs
9
- */
10
- const SWEEP_INTERVAL = 250
11
- const BUDGET = 8
12
-
13
- function simulate({ nodes, intervalMs, budget = BUDGET, seconds = 60, sampleCostMs = 0 }) {
14
- const lastSampleAt = new Array(nodes).fill(Number.NEGATIVE_INFINITY)
15
- const effectiveInterval = Math.max(1000, intervalMs) // minIntervalMs 缺省 1000
16
- const counts = new Array(nodes).fill(0)
17
- let inFlight = 0
18
- const inFlightUntil = []
19
- for (let t = 0; t <= seconds * 1000; t += SWEEP_INTERVAL) {
20
- // 采样完成(耗时 sampleCostMs)
21
- while (inFlightUntil.length && inFlightUntil[0].doneAt <= t) { const j = inFlightUntil.shift(); lastSampleAt[j.i] = j.doneAt; inFlight-- }
22
- if (inFlight > 0 && sampleCostMs === 0) { /* 瞬时完成:本拍全部回填 */ }
23
- let started = 0
24
- for (let i = 0; i < nodes; i++) {
25
- if (started >= budget - inFlight) break
26
- if (t < lastSampleAt[i] + effectiveInterval) continue
27
- started++
28
- counts[i]++
29
- if (sampleCostMs > 0) {
30
- inFlight++
31
- inFlightUntil.push({ i, doneAt: t + sampleCostMs })
32
- }
33
- else lastSampleAt[i] = t
34
- }
35
- }
36
- const demand = (seconds * 1000) / effectiveInterval * nodes
37
- const total = counts.reduce((a, b) => a + b, 0)
38
- return { counts, total, demand, min: Math.min(...counts), max: Math.max(...counts) }
39
- }
40
-
41
- for (const cfg of [
42
- { nodes: 8, intervalMs: 1000, seconds: 60 },
43
- { nodes: 50, intervalMs: 1000, seconds: 60 },
44
- { nodes: 50, intervalMs: 1000, seconds: 60, sampleCostMs: 100 },
45
- { nodes: 50, intervalMs: 1000, seconds: 60, sampleCostMs: 3000 }, // mqtt 驱动最坏:连不上 + 首帧等待 3s
46
- ]) {
47
- const r = simulate(cfg)
48
- const tail = r.counts.slice(-5).join(',')
49
- console.log(`nodes=${String(cfg.nodes).padStart(2)} interval=${cfg.intervalMs}ms cost=${cfg.sampleCostMs || 0}ms/拍250ms → 60s 内采样总数=${r.total}(需求 ${r.demand.toFixed(0)},达成 ${(r.total / r.demand * 100).toFixed(1)}%) 每节点 [min=${r.min} max=${r.max}] 末 5 节点=[${tail}]`)
50
- }