onbuzz 4.4.0 → 4.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (966) hide show
  1. package/package.json +1 -1
  2. package/src/core/agentPool.js +4 -0
  3. package/src/core/agentScheduler.js +9 -0
  4. package/src/core/stateManager.js +5 -0
  5. package/src/index.js +26 -0
  6. package/src/interfaces/__tests__/agentContextRoutes.test.js +272 -0
  7. package/src/interfaces/agentContextRoutes.js +257 -0
  8. package/src/interfaces/webServer.js +11 -0
  9. package/src/modules/widget/__tests__/naming.test.js +204 -0
  10. package/src/modules/widget/routes.js +21 -0
  11. package/src/modules/widget/schema.js +49 -1
  12. package/src/modules/widget/widgetTool.js +53 -0
  13. package/src/services/__tests__/contextInjectionService.test.js +41 -0
  14. package/src/services/contextInjectionService.js +24 -0
  15. package/src/tools/__tests__/platformControlAgentTeam.test.js +623 -0
  16. package/src/tools/__tests__/platformControlAgentTeamPermissions.test.js +253 -0
  17. package/src/tools/__tests__/platformControlAncestry.test.js +131 -0
  18. package/src/tools/__tests__/platformControlCascade.test.js +177 -0
  19. package/src/tools/__tests__/platformControlPermissions.test.js +128 -0
  20. package/src/tools/__tests__/platformControlPersistence.test.js +134 -0
  21. package/src/tools/__tests__/platformControlTool.test.js +391 -0
  22. package/src/tools/__tests__/terminalDedup.test.js +324 -0
  23. package/src/tools/platformControl/ancestry.js +85 -0
  24. package/src/tools/platformControl/cascadeService.js +146 -0
  25. package/src/tools/platformControl/permissions.js +394 -0
  26. package/src/tools/platformControlTool.js +854 -0
  27. package/src/tools/terminalDedup.js +178 -0
  28. package/src/tools/terminalTool.js +28 -0
  29. package/src/utilities/constants.js +1 -1
  30. package/web-ui/build/index.html +2 -2
  31. package/web-ui/build/static/1c-Cxgysx0K.js +1 -0
  32. package/web-ui/build/static/abap-D9Pd8DUG.js +1 -0
  33. package/web-ui/build/static/abnf-CHs5P8yl.js +1 -0
  34. package/web-ui/build/static/abnf-D5OtFEZO.js +1 -0
  35. package/web-ui/build/static/accesslog-CTD5Frmr.js +1 -0
  36. package/web-ui/build/static/actionscript-BN0BKQI7.js +1 -0
  37. package/web-ui/build/static/actionscript-DQNwbYlU.js +1 -0
  38. package/web-ui/build/static/ada-8O7AmGii.js +1 -0
  39. package/web-ui/build/static/ada-p8y2qCLB.js +1 -0
  40. package/web-ui/build/static/agda-BzT4bKSx.js +1 -0
  41. package/web-ui/build/static/al-Caq7o9RG.js +1 -0
  42. package/web-ui/build/static/angelscript-DivMpSHf.js +1 -0
  43. package/web-ui/build/static/antlr4-B1D_tnKH.js +1 -0
  44. package/web-ui/build/static/apache-l88_LooT.js +1 -0
  45. package/web-ui/build/static/apacheconf-kaxXABFE.js +1 -0
  46. package/web-ui/build/static/apex-CSdSRWUv.js +1 -0
  47. package/web-ui/build/static/apl-CHwVg89T.js +1 -0
  48. package/web-ui/build/static/applescript-C64qdYZf.js +1 -0
  49. package/web-ui/build/static/applescript-CqTGrBVp.js +1 -0
  50. package/web-ui/build/static/aql-BwKKr7z7.js +1 -0
  51. package/web-ui/build/static/arcade-C6oqHEwh.js +1 -0
  52. package/web-ui/build/static/arduino-DB4E20Km.js +1 -0
  53. package/web-ui/build/static/arduino-DKpgmHjE.js +1 -0
  54. package/web-ui/build/static/arff-CBbf8E8O.js +1 -0
  55. package/web-ui/build/static/armasm-Bogg7lrz.js +1 -0
  56. package/web-ui/build/static/asciidoc-3ZlDsfKD.js +1 -0
  57. package/web-ui/build/static/asciidoc-Cc88g_au.js +1 -0
  58. package/web-ui/build/static/asm6502-B4rN-vZ1.js +1 -0
  59. package/web-ui/build/static/asmatmel-B8zZLWGk.js +1 -0
  60. package/web-ui/build/static/aspectj-XdNtCtbN.js +1 -0
  61. package/web-ui/build/static/aspnet-DZVKB5n1.js +1 -0
  62. package/web-ui/build/static/autohotkey-CxDWLQqM.js +1 -0
  63. package/web-ui/build/static/autohotkey-DJStPrtS.js +1 -0
  64. package/web-ui/build/static/autoit-BWirJOCg.js +1 -0
  65. package/web-ui/build/static/autoit-CJcfmsnl.js +1 -0
  66. package/web-ui/build/static/avisynth-C7JQe3L7.js +1 -0
  67. package/web-ui/build/static/avrasm-CMiuHQvu.js +1 -0
  68. package/web-ui/build/static/avro-idl-kaRVyxMP.js +1 -0
  69. package/web-ui/build/static/awk-CQ70Cyh1.js +1 -0
  70. package/web-ui/build/static/axapta-DRxAzlG8.js +1 -0
  71. package/web-ui/build/static/bash-B2XqEYpT.js +1 -0
  72. package/web-ui/build/static/bash-D-D1taMA.js +1 -0
  73. package/web-ui/build/static/basic-Da1x7OIZ.js +1 -0
  74. package/web-ui/build/static/basic-Dslk2ZwT.js +1 -0
  75. package/web-ui/build/static/batch-B0wJNPoF.js +1 -0
  76. package/web-ui/build/static/bbcode-BXDdc2HS.js +1 -0
  77. package/web-ui/build/static/bicep-iiH-nx9J.js +1 -0
  78. package/web-ui/build/static/birb-DuTqqibI.js +1 -0
  79. package/web-ui/build/static/bison-D1Hw6owA.js +1 -0
  80. package/web-ui/build/static/bnf-BRhzfr87.js +1 -0
  81. package/web-ui/build/static/bnf-u1Iy1Ku7.js +1 -0
  82. package/web-ui/build/static/brainfuck-C4R5VJ3_.js +1 -0
  83. package/web-ui/build/static/brainfuck-C8niWF0i.js +1 -0
  84. package/web-ui/build/static/brightscript-DavMfkHx.js +1 -0
  85. package/web-ui/build/static/bro-CEMPoYum.js +1 -0
  86. package/web-ui/build/static/bsl-COeqiMqc.js +1 -0
  87. package/web-ui/build/static/c-BaaVQwFt.js +1 -0
  88. package/web-ui/build/static/c-BvALLiMv.js +1 -0
  89. package/web-ui/build/static/c-like-C4yx6s7b.js +1 -0
  90. package/web-ui/build/static/cal-CSxgKgNR.js +1 -0
  91. package/web-ui/build/static/capnproto-C9cMEmIo.js +1 -0
  92. package/web-ui/build/static/ceylon-Dj67Lf2T.js +1 -0
  93. package/web-ui/build/static/cfscript-BhALECgj.js +1 -0
  94. package/web-ui/build/static/chaiscript-Cg5weNRB.js +1 -0
  95. package/web-ui/build/static/cil-BR-JCsPu.js +1 -0
  96. package/web-ui/build/static/clean-xJMmqZ4X.js +1 -0
  97. package/web-ui/build/static/clojure-9C3tRo_T.js +1 -0
  98. package/web-ui/build/static/clojure-C2KNwa0h.js +1 -0
  99. package/web-ui/build/static/clojure-repl-B-pke3nS.js +1 -0
  100. package/web-ui/build/static/cmake-C0BFHpjZ.js +1 -0
  101. package/web-ui/build/static/cmake-DYoa_Kz_.js +1 -0
  102. package/web-ui/build/static/cobol-Bj_qcMsY.js +1 -0
  103. package/web-ui/build/static/coffeescript-C2KEz8d0.js +1 -0
  104. package/web-ui/build/static/coffeescript-CQsP9N_M.js +1 -0
  105. package/web-ui/build/static/concurnas-Ceu24KQb.js +1 -0
  106. package/web-ui/build/static/coq-CP7VW0bo.js +1 -0
  107. package/web-ui/build/static/coq-DQry0I8v.js +1 -0
  108. package/web-ui/build/static/cos-DAjhu7pi.js +1 -0
  109. package/web-ui/build/static/cpp-BwHJ0JtK.js +1 -0
  110. package/web-ui/build/static/cpp-Dro3stzS.js +1 -0
  111. package/web-ui/build/static/crmsh-Bnwknpi9.js +1 -0
  112. package/web-ui/build/static/crystal-B7TVeIo6.js +1 -0
  113. package/web-ui/build/static/crystal-Cy5JlSrW.js +1 -0
  114. package/web-ui/build/static/csharp-CeouYZK3.js +1 -0
  115. package/web-ui/build/static/csharp-Dv2oxLAS.js +1 -0
  116. package/web-ui/build/static/cshtml-C9IRHsFH.js +1 -0
  117. package/web-ui/build/static/csp-C85pVqYT.js +1 -0
  118. package/web-ui/build/static/csp-MJntgwIj.js +1 -0
  119. package/web-ui/build/static/css-DWTfQjN4.js +1 -0
  120. package/web-ui/build/static/css-extras-BmVbsPjr.js +1 -0
  121. package/web-ui/build/static/csv-zUw-JkSo.js +1 -0
  122. package/web-ui/build/static/cypher-DQOOp0bG.js +1 -0
  123. package/web-ui/build/static/d-B7Cku9c8.js +1 -0
  124. package/web-ui/build/static/d-Lnzvs4Wd.js +1 -0
  125. package/web-ui/build/static/dart-CeK_W9Mg.js +1 -0
  126. package/web-ui/build/static/dart-Z5nwVCn_.js +1 -0
  127. package/web-ui/build/static/dataweave-Bv7GTsiJ.js +1 -0
  128. package/web-ui/build/static/dax-CxkNT7ml.js +1 -0
  129. package/web-ui/build/static/delphi-BnBBHmHI.js +1 -0
  130. package/web-ui/build/static/dhall-DzzkunJZ.js +1 -0
  131. package/web-ui/build/static/diff-BKZzYJzc.js +1 -0
  132. package/web-ui/build/static/diff-BfTiUZV3.js +1 -0
  133. package/web-ui/build/static/django-BY4l8873.js +1 -0
  134. package/web-ui/build/static/django-NRVGlUZ_.js +1 -0
  135. package/web-ui/build/static/dns-Dvc8YawT.js +1 -0
  136. package/web-ui/build/static/dns-zone-file-CkaiOrlK.js +1 -0
  137. package/web-ui/build/static/docker-BQXYNHPO.js +1 -0
  138. package/web-ui/build/static/dockerfile-CkHfYmB1.js +1 -0
  139. package/web-ui/build/static/dos-Cj0YcQAg.js +1 -0
  140. package/web-ui/build/static/dot-zgBkKTS-.js +1 -0
  141. package/web-ui/build/static/dsconfig-Yy07ZSap.js +1 -0
  142. package/web-ui/build/static/dts-DyTWnuFT.js +1 -0
  143. package/web-ui/build/static/dust-CKq7f4u7.js +1 -0
  144. package/web-ui/build/static/ebnf-DJRrwYUt.js +1 -0
  145. package/web-ui/build/static/ebnf-RHbRUELR.js +1 -0
  146. package/web-ui/build/static/editorconfig-BPnyfBW2.js +1 -0
  147. package/web-ui/build/static/eiffel-yj-2JB74.js +1 -0
  148. package/web-ui/build/static/ejs-DitQDEAj.js +1 -0
  149. package/web-ui/build/static/elixir-3QGdRPiZ.js +1 -0
  150. package/web-ui/build/static/elixir-DjVihWJd.js +1 -0
  151. package/web-ui/build/static/elm-BY6TIO5U.js +1 -0
  152. package/web-ui/build/static/elm-CRkIBVgc.js +1 -0
  153. package/web-ui/build/static/erb-Djhpl6Qv.js +1 -0
  154. package/web-ui/build/static/erb-T-e_0q4M.js +1 -0
  155. package/web-ui/build/static/erlang-BHne0Sow.js +1 -0
  156. package/web-ui/build/static/erlang-BwFMbXMn.js +1 -0
  157. package/web-ui/build/static/erlang-repl-BkeLNBB1.js +1 -0
  158. package/web-ui/build/static/etlua-C7wAJl9b.js +1 -0
  159. package/web-ui/build/static/excel-DxE1g8nj.js +1 -0
  160. package/web-ui/build/static/excel-formula-CJfyOSIQ.js +1 -0
  161. package/web-ui/build/static/factor-CoKZ2w9G.js +1 -0
  162. package/web-ui/build/static/false-R3UgYwdZ.js +1 -0
  163. package/web-ui/build/static/firestore-security-rules-Na-FK95T.js +1 -0
  164. package/web-ui/build/static/fix-CvUjGqrP.js +1 -0
  165. package/web-ui/build/static/flix-DZcdobtd.js +1 -0
  166. package/web-ui/build/static/flow-Bs4ybDfF.js +1 -0
  167. package/web-ui/build/static/fortran-Bo7HQHVz.js +1 -0
  168. package/web-ui/build/static/fortran-C01QKAjv.js +1 -0
  169. package/web-ui/build/static/fsharp-Bl0db-E4.js +1 -0
  170. package/web-ui/build/static/fsharp-CyZIu__H.js +1 -0
  171. package/web-ui/build/static/ftl-CWXbnuJ8.js +1 -0
  172. package/web-ui/build/static/gams-BqHeBOiK.js +1 -0
  173. package/web-ui/build/static/gap-Dotaw9CX.js +1 -0
  174. package/web-ui/build/static/gauss-BT78eAPL.js +1 -0
  175. package/web-ui/build/static/gcode-MKCsCHbV.js +1 -0
  176. package/web-ui/build/static/gcode-bZIzS7dq.js +1 -0
  177. package/web-ui/build/static/gdscript-BfFdzROd.js +1 -0
  178. package/web-ui/build/static/gedcom-C-0fkvQT.js +1 -0
  179. package/web-ui/build/static/gherkin-Bgefs1Ac.js +1 -0
  180. package/web-ui/build/static/gherkin-BwLhttSG.js +1 -0
  181. package/web-ui/build/static/git-Cf3XNFwK.js +1 -0
  182. package/web-ui/build/static/glsl-BRBvgtKX.js +1 -0
  183. package/web-ui/build/static/glsl-Ci0Ywihb.js +1 -0
  184. package/web-ui/build/static/gml-BGED3ZV5.js +1 -0
  185. package/web-ui/build/static/gml-Bo5ybH2Z.js +1 -0
  186. package/web-ui/build/static/gn-Dvq3uq8q.js +1 -0
  187. package/web-ui/build/static/go-DEXubI7V.js +1 -0
  188. package/web-ui/build/static/go-DQ-rOBtr.js +1 -0
  189. package/web-ui/build/static/go-module-CJ0C_rZQ.js +1 -0
  190. package/web-ui/build/static/golo-BMZyESOG.js +1 -0
  191. package/web-ui/build/static/gradle-DamtVT5m.js +1 -0
  192. package/web-ui/build/static/graphql-BERukF58.js +1 -0
  193. package/web-ui/build/static/groovy-B-WmRKEQ.js +1 -0
  194. package/web-ui/build/static/groovy-BzgGHCpW.js +1 -0
  195. package/web-ui/build/static/haml-B50hpu0J.js +1 -0
  196. package/web-ui/build/static/haml-vZAqNnLr.js +1 -0
  197. package/web-ui/build/static/handlebars-ChvSiZA5.js +1 -0
  198. package/web-ui/build/static/handlebars-z32GTNvC.js +1 -0
  199. package/web-ui/build/static/haskell-BWLVCHRl.js +1 -0
  200. package/web-ui/build/static/haskell-CZ4HT-QV.js +1 -0
  201. package/web-ui/build/static/haxe-Dff2UzKb.js +1 -0
  202. package/web-ui/build/static/haxe-DtUMfT4Y.js +1 -0
  203. package/web-ui/build/static/hcl-CPdCn21C.js +1 -0
  204. package/web-ui/build/static/hlsl-Ddnzpafa.js +1 -0
  205. package/web-ui/build/static/hoon-BmzYN5g6.js +1 -0
  206. package/web-ui/build/static/hpkp-Cf4BtYzp.js +1 -0
  207. package/web-ui/build/static/hsp-CtNdizh5.js +1 -0
  208. package/web-ui/build/static/hsts-ChmUnrWY.js +1 -0
  209. package/web-ui/build/static/htmlbars-FvxUz397.js +1 -0
  210. package/web-ui/build/static/http-C91BqIc4.js +1 -0
  211. package/web-ui/build/static/http-DUkMpz6R.js +1 -0
  212. package/web-ui/build/static/hy-BgEorqc6.js +1 -0
  213. package/web-ui/build/static/ichigojam-CyJ85XqZ.js +1 -0
  214. package/web-ui/build/static/icon-CWVwUSUB.js +1 -0
  215. package/web-ui/build/static/icu-message-format-DQ5Vf-57.js +1 -0
  216. package/web-ui/build/static/idris-25epvnkz.js +1 -0
  217. package/web-ui/build/static/iecst-D_Q4A3Ao.js +1 -0
  218. package/web-ui/build/static/ignore-Dn3TUem-.js +1 -0
  219. package/web-ui/build/static/index-1GAqwN2P.js +1029 -0
  220. package/web-ui/build/static/index-Bbt0N_qA.css +1 -0
  221. package/web-ui/build/static/index-COM0znG6.js +13 -0
  222. package/web-ui/build/static/index-Cq1FjdFd.js +1 -0
  223. package/web-ui/build/static/inform7-CFrNuUCE.js +1 -0
  224. package/web-ui/build/static/inform7-DKEqg7Td.js +1 -0
  225. package/web-ui/build/static/ini-C-WeV3rA.js +1 -0
  226. package/web-ui/build/static/ini-DNeLlQLb.js +1 -0
  227. package/web-ui/build/static/io-CHx2lS-R.js +1 -0
  228. package/web-ui/build/static/irpf90-D4fNrYKT.js +1 -0
  229. package/web-ui/build/static/isbl-BwxgZUmw.js +1 -0
  230. package/web-ui/build/static/j-EkuSi-Ss.js +1 -0
  231. package/web-ui/build/static/java-BtphFsNb.js +1 -0
  232. package/web-ui/build/static/java-D6Ksxtks.js +1 -0
  233. package/web-ui/build/static/javadoc-COfrpXIF.js +1 -0
  234. package/web-ui/build/static/javadoclike-C0DIBgSo.js +1 -0
  235. package/web-ui/build/static/javascript-D9_bdns_.js +1 -0
  236. package/web-ui/build/static/javastacktrace-BgesTIoE.js +1 -0
  237. package/web-ui/build/static/jboss-cli-BCBm8RaA.js +1 -0
  238. package/web-ui/build/static/jexl-Bur7gjJl.js +1 -0
  239. package/web-ui/build/static/jolie-CG2HtqVF.js +1 -0
  240. package/web-ui/build/static/jq-BjcZo4Ta.js +1 -0
  241. package/web-ui/build/static/js-extras-DPWP-xWb.js +1 -0
  242. package/web-ui/build/static/js-templates-BYQFylC_.js +1 -0
  243. package/web-ui/build/static/jsdoc-CiOxmgl5.js +1 -0
  244. package/web-ui/build/static/json-C2-b3Xpo.js +1 -0
  245. package/web-ui/build/static/json-D7ok2MJS.js +1 -0
  246. package/web-ui/build/static/json5-DRNOdkus.js +1 -0
  247. package/web-ui/build/static/jsonp-FFJzAxUk.js +1 -0
  248. package/web-ui/build/static/jsstacktrace-C4ki-LaP.js +1 -0
  249. package/web-ui/build/static/jsx-ZxGQpUNq.js +1 -0
  250. package/web-ui/build/static/julia-7ooB8a4b.js +1 -0
  251. package/web-ui/build/static/julia-DzjCRNEr.js +1 -0
  252. package/web-ui/build/static/julia-repl-pceaZSLt.js +1 -0
  253. package/web-ui/build/static/keepalived-BQgTZddo.js +1 -0
  254. package/web-ui/build/static/keyman-Cqlba6tn.js +1 -0
  255. package/web-ui/build/static/kotlin-BygmvqBG.js +1 -0
  256. package/web-ui/build/static/kotlin-DrN0ycN8.js +1 -0
  257. package/web-ui/build/static/kumir-YhasANvI.js +1 -0
  258. package/web-ui/build/static/kusto-LQa6MD2B.js +1 -0
  259. package/web-ui/build/static/lasso-Ca3RFbcE.js +1 -0
  260. package/web-ui/build/static/latex-BoQj21fG.js +1 -0
  261. package/web-ui/build/static/latex-ZxewREOs.js +1 -0
  262. package/web-ui/build/static/latte-40SpSG4q.js +1 -0
  263. package/web-ui/build/static/ldif-CzTJxBjJ.js +1 -0
  264. package/web-ui/build/static/leaf-DO9LaVNe.js +1 -0
  265. package/web-ui/build/static/less-BoClFdvD.js +1 -0
  266. package/web-ui/build/static/less-C1s1U6-n.js +1 -0
  267. package/web-ui/build/static/lilypond-D5wHKW8A.js +1 -0
  268. package/web-ui/build/static/liquid-BRQzL-S2.js +1 -0
  269. package/web-ui/build/static/lisp-8q-QRYKi.js +1 -0
  270. package/web-ui/build/static/lisp-J8TPaPPb.js +1 -0
  271. package/web-ui/build/static/livecodeserver-Dcr3yGmD.js +1 -0
  272. package/web-ui/build/static/livescript-BUEQmlAe.js +1 -0
  273. package/web-ui/build/static/livescript-DsId63Ot.js +1 -0
  274. package/web-ui/build/static/llvm-B3CCzYxo.js +1 -0
  275. package/web-ui/build/static/llvm-kQGfyqnj.js +1 -0
  276. package/web-ui/build/static/log-BlA5152b.js +1 -0
  277. package/web-ui/build/static/lolcode-8WRAMeb2.js +1 -0
  278. package/web-ui/build/static/lsl-BZUMQNE2.js +1 -0
  279. package/web-ui/build/static/lua-C4hJ-Gql.js +1 -0
  280. package/web-ui/build/static/lua-RxOeZV_z.js +1 -0
  281. package/web-ui/build/static/magma-U9kYv2QD.js +1 -0
  282. package/web-ui/build/static/makefile-1Cu2rVDg.js +1 -0
  283. package/web-ui/build/static/makefile-mmZ8lbad.js +1 -0
  284. package/web-ui/build/static/markdown-CCqDOXhR.js +1 -0
  285. package/web-ui/build/static/markdown-CVOmqzdD.js +1 -0
  286. package/web-ui/build/static/markup-templating-C7eiVR0j.js +1 -0
  287. package/web-ui/build/static/mathematica-BbKHQ6zH.js +1 -0
  288. package/web-ui/build/static/matlab-BbMwJ6T0.js +1 -0
  289. package/web-ui/build/static/matlab-gHn5UhMb.js +1 -0
  290. package/web-ui/build/static/maxima-CuB3n0ri.js +1 -0
  291. package/web-ui/build/static/maxscript-jhOix4gn.js +1 -0
  292. package/web-ui/build/static/mel-Bpjqa7Ec.js +1 -0
  293. package/web-ui/build/static/mel-QxMxBq03.js +1 -0
  294. package/web-ui/build/static/mercury-C8IdDyFB.js +1 -0
  295. package/web-ui/build/static/mermaid-v41WDixf.js +1 -0
  296. package/web-ui/build/static/mipsasm-kYH27KXy.js +1 -0
  297. package/web-ui/build/static/mizar-BCJI9Jxa.js +1 -0
  298. package/web-ui/build/static/mizar-BCxP_6pj.js +1 -0
  299. package/web-ui/build/static/mojolicious-C7DC_CUp.js +1 -0
  300. package/web-ui/build/static/mongodb-DvBX00WY.js +1 -0
  301. package/web-ui/build/static/monkey-B7KjOZtt.js +1 -0
  302. package/web-ui/build/static/monkey-CFKZd6lx.js +1 -0
  303. package/web-ui/build/static/moonscript-44jD_uAZ.js +1 -0
  304. package/web-ui/build/static/moonscript-B3KahKf5.js +1 -0
  305. package/web-ui/build/static/n1ql-CxJOkBbD.js +1 -0
  306. package/web-ui/build/static/n1ql-FJFE6P7E.js +1 -0
  307. package/web-ui/build/static/n4js-D5jJTGdO.js +1 -0
  308. package/web-ui/build/static/nand2tetris-hdl-DlsCaky2.js +1 -0
  309. package/web-ui/build/static/naniscript-C3YsvWgN.js +1 -0
  310. package/web-ui/build/static/nasm-DCGKvOZq.js +1 -0
  311. package/web-ui/build/static/neon-nyFNinx-.js +1 -0
  312. package/web-ui/build/static/nevod-C5PnMzAW.js +1 -0
  313. package/web-ui/build/static/nginx-BUgMakda.js +1 -0
  314. package/web-ui/build/static/nginx-C5JBKsuz.js +1 -0
  315. package/web-ui/build/static/nim-BFu6fQgc.js +1 -0
  316. package/web-ui/build/static/nim-D0uh-nR9.js +1 -0
  317. package/web-ui/build/static/nix-BiOn3l1e.js +1 -0
  318. package/web-ui/build/static/nix-tapJszPl.js +1 -0
  319. package/web-ui/build/static/node-repl-BTp9CFzE.js +1 -0
  320. package/web-ui/build/static/nsis-B7hV5A06.js +1 -0
  321. package/web-ui/build/static/nsis-DLshnCv-.js +1 -0
  322. package/web-ui/build/static/objectivec-BKjt_sKE.js +1 -0
  323. package/web-ui/build/static/objectivec-KUMYgk5w.js +1 -0
  324. package/web-ui/build/static/ocaml-CV2nKA_A.js +1 -0
  325. package/web-ui/build/static/ocaml-ZyZ-dXmE.js +1 -0
  326. package/web-ui/build/static/opencl-igIWfc0n.js +1 -0
  327. package/web-ui/build/static/openqasm-ByCPmCpS.js +1 -0
  328. package/web-ui/build/static/openscad-Db6ypam1.js +1 -0
  329. package/web-ui/build/static/oxygene-CBbaQWRB.js +1 -0
  330. package/web-ui/build/static/oz-lEl_mXVw.js +1 -0
  331. package/web-ui/build/static/parigp-c2FbheBr.js +1 -0
  332. package/web-ui/build/static/parser-Ba6uivHf.js +1 -0
  333. package/web-ui/build/static/parser3-Cm5cgVSQ.js +1 -0
  334. package/web-ui/build/static/pascal-JgY-dd52.js +1 -0
  335. package/web-ui/build/static/pascaligo-BjSdyegq.js +1 -0
  336. package/web-ui/build/static/pcaxis-CDdxDfqJ.js +1 -0
  337. package/web-ui/build/static/peoplecode-BCPhsbK6.js +1 -0
  338. package/web-ui/build/static/perl-ClVPikLH.js +1 -0
  339. package/web-ui/build/static/perl-pRjXJ4uc.js +1 -0
  340. package/web-ui/build/static/pf-D6VrFfuf.js +1 -0
  341. package/web-ui/build/static/pgsql-DAv4ezCU.js +1 -0
  342. package/web-ui/build/static/php-Bz3Bn1G_.js +1 -0
  343. package/web-ui/build/static/php-extras-B8k1hZ7O.js +1 -0
  344. package/web-ui/build/static/php-template-DJJiMC8Q.js +1 -0
  345. package/web-ui/build/static/php-zCXGNRnB.js +1 -0
  346. package/web-ui/build/static/phpdoc-CpnPjGDk.js +1 -0
  347. package/web-ui/build/static/plaintext-BRkRKfKN.js +1 -0
  348. package/web-ui/build/static/plsql-BARhkvBo.js +1 -0
  349. package/web-ui/build/static/pony-guYTDEtj.js +1 -0
  350. package/web-ui/build/static/powerquery-DcM2Yj3O.js +1 -0
  351. package/web-ui/build/static/powershell-DJ8ftCxt.js +1 -0
  352. package/web-ui/build/static/powershell-DSRUQzqt.js +1 -0
  353. package/web-ui/build/static/processing-BCmW5Adu.js +1 -0
  354. package/web-ui/build/static/processing-DDMjYIa-.js +1 -0
  355. package/web-ui/build/static/profile-C9J13WXr.js +1 -0
  356. package/web-ui/build/static/prolog-CUyUfIUU.js +1 -0
  357. package/web-ui/build/static/prolog-wjvrQEy3.js +1 -0
  358. package/web-ui/build/static/promql-BkN3_kL1.js +1 -0
  359. package/web-ui/build/static/properties-B7zGUFLC.js +1 -0
  360. package/web-ui/build/static/properties-DHKWbrVz.js +1 -0
  361. package/web-ui/build/static/protobuf-CVwMi4py.js +1 -0
  362. package/web-ui/build/static/protobuf-CWUzVSVD.js +1 -0
  363. package/web-ui/build/static/psl-DdX6HMd3.js +1 -0
  364. package/web-ui/build/static/pug-D-Sn469u.js +1 -0
  365. package/web-ui/build/static/puppet-B6ZR9-D4.js +1 -0
  366. package/web-ui/build/static/puppet-m66LRiIo.js +1 -0
  367. package/web-ui/build/static/pure-7deZH-sc.js +1 -0
  368. package/web-ui/build/static/purebasic-DQLUcurt.js +1 -0
  369. package/web-ui/build/static/purebasic-DYMw9jTh.js +1 -0
  370. package/web-ui/build/static/purescript-DpysoAya.js +1 -0
  371. package/web-ui/build/static/python-D66_vufV.js +1 -0
  372. package/web-ui/build/static/python-DYxaIENO.js +1 -0
  373. package/web-ui/build/static/python-repl-DPjvQNxf.js +1 -0
  374. package/web-ui/build/static/q-DDHNKITB.js +1 -0
  375. package/web-ui/build/static/q-xV1Q9ILw.js +1 -0
  376. package/web-ui/build/static/qml-DSENM1u-.js +1 -0
  377. package/web-ui/build/static/qml-DfhbPQ-t.js +1 -0
  378. package/web-ui/build/static/qore-LQCffrzv.js +1 -0
  379. package/web-ui/build/static/qsharp-BcSf2ZGH.js +1 -0
  380. package/web-ui/build/static/r-Dc6GR0yQ.js +1 -0
  381. package/web-ui/build/static/r-vludgk3t.js +1 -0
  382. package/web-ui/build/static/racket-DJYIkQwh.js +1 -0
  383. package/web-ui/build/static/reason-D75i_ede.js +1 -0
  384. package/web-ui/build/static/reasonml-DhRXKjo3.js +1 -0
  385. package/web-ui/build/static/regex-D67iENuu.js +1 -0
  386. package/web-ui/build/static/rego-CJ2Eeb4g.js +1 -0
  387. package/web-ui/build/static/renpy-DUDNyFqb.js +1 -0
  388. package/web-ui/build/static/rest-Dn7SYTNt.js +1 -0
  389. package/web-ui/build/static/rib-BVUY5dIb.js +1 -0
  390. package/web-ui/build/static/rip-Bu9K3Hu9.js +1 -0
  391. package/web-ui/build/static/roboconf-CUzY2sLf.js +1 -0
  392. package/web-ui/build/static/roboconf-DBEmoD-Z.js +1 -0
  393. package/web-ui/build/static/robotframework-70EV7ffL.js +1 -0
  394. package/web-ui/build/static/routeros-KgfwmDVO.js +1 -0
  395. package/web-ui/build/static/rsl-D3oCnFGa.js +1 -0
  396. package/web-ui/build/static/ruby-Dqa0HtB4.js +1 -0
  397. package/web-ui/build/static/ruby-PeJYeL87.js +1 -0
  398. package/web-ui/build/static/ruleslanguage-vo3eM_mz.js +1 -0
  399. package/web-ui/build/static/rust-CwU6t4_Y.js +1 -0
  400. package/web-ui/build/static/rust-WXADYh9r.js +1 -0
  401. package/web-ui/build/static/sas-Cg6ADdDH.js +1 -0
  402. package/web-ui/build/static/sas-DWoEaeXv.js +1 -0
  403. package/web-ui/build/static/sass-DbHJHeBV.js +1 -0
  404. package/web-ui/build/static/scala-B6oE2QKr.js +1 -0
  405. package/web-ui/build/static/scala-NFQGPaYa.js +1 -0
  406. package/web-ui/build/static/scheme-C8Jx4oX7.js +1 -0
  407. package/web-ui/build/static/scheme-CUMBJaUf.js +1 -0
  408. package/web-ui/build/static/scilab-D1VqsdSy.js +1 -0
  409. package/web-ui/build/static/scss-CSH87oUD.js +1 -0
  410. package/web-ui/build/static/scss-GLX6NNDB.js +1 -0
  411. package/web-ui/build/static/shell-CbOhN21M.js +1 -0
  412. package/web-ui/build/static/shell-session-BQPdJJZS.js +1 -0
  413. package/web-ui/build/static/smali-BYbEOQX5.js +1 -0
  414. package/web-ui/build/static/smali-DcoYSibw.js +1 -0
  415. package/web-ui/build/static/smalltalk-CQkedD8N.js +1 -0
  416. package/web-ui/build/static/smalltalk-DihI81Cd.js +1 -0
  417. package/web-ui/build/static/smarty-RRvllERL.js +1 -0
  418. package/web-ui/build/static/sml-BJkMhBLU.js +1 -0
  419. package/web-ui/build/static/sml-Bm2IN0wP.js +1 -0
  420. package/web-ui/build/static/solidity-CsCW8kyX.js +1 -0
  421. package/web-ui/build/static/solution-file-B5YSxWQt.js +1 -0
  422. package/web-ui/build/static/soy-Dek2_YCW.js +1 -0
  423. package/web-ui/build/static/sparql-BeTxhWa4.js +1 -0
  424. package/web-ui/build/static/splunk-spl-hq6BW85c.js +1 -0
  425. package/web-ui/build/static/sqf-C-u4en-i.js +1 -0
  426. package/web-ui/build/static/sqf-DP0IhDYt.js +1 -0
  427. package/web-ui/build/static/sql-BzL0uonb.js +1 -0
  428. package/web-ui/build/static/sql-Zy6tV_us.js +1 -0
  429. package/web-ui/build/static/sql_more-BP2G6Vh5.js +1 -0
  430. package/web-ui/build/static/squirrel-C3MnMYx5.js +1 -0
  431. package/web-ui/build/static/stan-7iKo211G.js +1 -0
  432. package/web-ui/build/static/stan-C1lcIZjJ.js +1 -0
  433. package/web-ui/build/static/stata-DJ6GKcaw.js +1 -0
  434. package/web-ui/build/static/step21-Pg-uClDB.js +1 -0
  435. package/web-ui/build/static/stylus-DFAxYuRi.js +1 -0
  436. package/web-ui/build/static/stylus-DT6xc_Nv.js +1 -0
  437. package/web-ui/build/static/subunit-aGvGJXZZ.js +1 -0
  438. package/web-ui/build/static/swift-Sqmdmb4O.js +1 -0
  439. package/web-ui/build/static/swift-cUX-MVl4.js +1 -0
  440. package/web-ui/build/static/systemd-qIaU0Trg.js +1 -0
  441. package/web-ui/build/static/t4-cs-DtO6Bgg1.js +1 -0
  442. package/web-ui/build/static/t4-templating-DSSM2N5M.js +1 -0
  443. package/web-ui/build/static/t4-vb-tKIiE5uC.js +1 -0
  444. package/web-ui/build/static/taggerscript-Dt2Kgr-W.js +1 -0
  445. package/web-ui/build/static/tap-BMEgEMIk.js +1 -0
  446. package/web-ui/build/static/tap-C4TdzsNz.js +1 -0
  447. package/web-ui/build/static/tcl-B6k4Af9f.js +1 -0
  448. package/web-ui/build/static/tcl-Dq4_i5q5.js +1 -0
  449. package/web-ui/build/static/textile-C0uqAPk0.js +1 -0
  450. package/web-ui/build/static/thrift-DybQEjaA.js +1 -0
  451. package/web-ui/build/static/toml-DG1a2FSS.js +1 -0
  452. package/web-ui/build/static/tp-BwdfEEST.js +1 -0
  453. package/web-ui/build/static/tremor-JSTukmt-.js +1 -0
  454. package/web-ui/build/static/tsx-YUfsqzPf.js +1 -0
  455. package/web-ui/build/static/tt2-D9A_ACnF.js +1 -0
  456. package/web-ui/build/static/turtle-BKxwLa_-.js +1 -0
  457. package/web-ui/build/static/twig-BeEDK9Ri.js +1 -0
  458. package/web-ui/build/static/twig-TnOWwD7-.js +1 -0
  459. package/web-ui/build/static/typescript-BjZl8C3q.js +1 -0
  460. package/web-ui/build/static/typescript-qtW5Xh-j.js +1 -0
  461. package/web-ui/build/static/typoscript-Dj4sO7Jx.js +1 -0
  462. package/web-ui/build/static/unrealscript-DInimzNQ.js +1 -0
  463. package/web-ui/build/static/uorazor-B_9tFVKw.js +1 -0
  464. package/web-ui/build/static/uri-CTuMA7_k.js +1 -0
  465. package/web-ui/build/static/v-CvE0Ujqx.js +1 -0
  466. package/web-ui/build/static/vala-CLGf3xEs.js +1 -0
  467. package/web-ui/build/static/vala-Dm8LmEpm.js +1 -0
  468. package/web-ui/build/static/vbnet-Cwm2TjGP.js +1 -0
  469. package/web-ui/build/static/vbnet-LCd9GiMJ.js +1 -0
  470. package/web-ui/build/static/vbscript-DVj94_-y.js +1 -0
  471. package/web-ui/build/static/vbscript-html-CDHtSX-o.js +1 -0
  472. package/web-ui/build/static/velocity-C-OrhdDf.js +1 -0
  473. package/web-ui/build/static/verilog-Bh18N7TM.js +1 -0
  474. package/web-ui/build/static/verilog-C-YNXb8j.js +1 -0
  475. package/web-ui/build/static/vhdl-BFNm41_R.js +1 -0
  476. package/web-ui/build/static/vhdl-CyLgBDKk.js +1 -0
  477. package/web-ui/build/static/vim-BTafUqR0.js +1 -0
  478. package/web-ui/build/static/vim-Xg1pEHJe.js +1 -0
  479. package/web-ui/build/static/visual-basic-CDgUOlvq.js +1 -0
  480. package/web-ui/build/static/warpscript-1ELDmkt5.js +1 -0
  481. package/web-ui/build/static/wasm-C25KdQk5.js +1 -0
  482. package/web-ui/build/static/web-idl-CsdVYgpL.js +1 -0
  483. package/web-ui/build/static/wiki-4RrZuyhV.js +1 -0
  484. package/web-ui/build/static/wolfram-DMiRIwvp.js +1 -0
  485. package/web-ui/build/static/wren-Vk5PBcVB.js +1 -0
  486. package/web-ui/build/static/x86asm-D9TFTgye.js +1 -0
  487. package/web-ui/build/static/xeora-SAn_K3Ts.js +1 -0
  488. package/web-ui/build/static/xl-Da2Fl8D9.js +1 -0
  489. package/web-ui/build/static/xml-CeLm6l4V.js +1 -0
  490. package/web-ui/build/static/xml-doc-DypYH408.js +1 -0
  491. package/web-ui/build/static/xojo-CrfMiv1-.js +1 -0
  492. package/web-ui/build/static/xquery-8tOqVkgP.js +1 -0
  493. package/web-ui/build/static/xquery-CLOnNPtx.js +1 -0
  494. package/web-ui/build/static/yaml-CXiycPmU.js +1 -0
  495. package/web-ui/build/static/yaml-cIKjKW-H.js +1 -0
  496. package/web-ui/build/static/yang-KVshO9Ce.js +1 -0
  497. package/web-ui/build/static/zephir-B88JNqlj.js +1 -0
  498. package/web-ui/build/static/zig-C6GYIeFs.js +1 -0
  499. package/web-ui/build/static/1c-DhNfWMWm.js +0 -1
  500. package/web-ui/build/static/abap-QOWHgSNA.js +0 -1
  501. package/web-ui/build/static/abnf-C9PFiETQ.js +0 -1
  502. package/web-ui/build/static/abnf-DEbBdEpP.js +0 -1
  503. package/web-ui/build/static/accesslog-DaKq5_Ts.js +0 -1
  504. package/web-ui/build/static/actionscript-BcY19SjW.js +0 -1
  505. package/web-ui/build/static/actionscript-CbLJrkm9.js +0 -1
  506. package/web-ui/build/static/ada-D1vjmumu.js +0 -1
  507. package/web-ui/build/static/ada-hAjtW1jL.js +0 -1
  508. package/web-ui/build/static/agda-Bhk3JFT9.js +0 -1
  509. package/web-ui/build/static/al-DYmeq5B0.js +0 -1
  510. package/web-ui/build/static/angelscript-BxCBNQXZ.js +0 -1
  511. package/web-ui/build/static/antlr4-CPmkdILF.js +0 -1
  512. package/web-ui/build/static/apache-CnwL2ZvW.js +0 -1
  513. package/web-ui/build/static/apacheconf-CfeBIh7R.js +0 -1
  514. package/web-ui/build/static/apex-C36kXZsT.js +0 -1
  515. package/web-ui/build/static/apl-CeT_l0YX.js +0 -1
  516. package/web-ui/build/static/applescript-BimsduDW.js +0 -1
  517. package/web-ui/build/static/applescript-CLBFEONC.js +0 -1
  518. package/web-ui/build/static/aql-DcXNMsw5.js +0 -1
  519. package/web-ui/build/static/arcade-CsONs-nh.js +0 -1
  520. package/web-ui/build/static/arduino-1XAf972o.js +0 -1
  521. package/web-ui/build/static/arduino-BkRulzgv.js +0 -1
  522. package/web-ui/build/static/arff-QhmkBHXy.js +0 -1
  523. package/web-ui/build/static/armasm-Cf34TCbg.js +0 -1
  524. package/web-ui/build/static/asciidoc-Dxk-KUUW.js +0 -1
  525. package/web-ui/build/static/asciidoc-mpuuiNok.js +0 -1
  526. package/web-ui/build/static/asm6502-0M2Se3gz.js +0 -1
  527. package/web-ui/build/static/asmatmel-DhFK-DLd.js +0 -1
  528. package/web-ui/build/static/aspectj-BKNOwBC8.js +0 -1
  529. package/web-ui/build/static/aspnet-BZ88RTxR.js +0 -1
  530. package/web-ui/build/static/autohotkey-DGmMm6oy.js +0 -1
  531. package/web-ui/build/static/autohotkey-HUDPuon_.js +0 -1
  532. package/web-ui/build/static/autoit-B-YW8YdA.js +0 -1
  533. package/web-ui/build/static/autoit-CvHRbbE-.js +0 -1
  534. package/web-ui/build/static/avisynth-C6iP20gR.js +0 -1
  535. package/web-ui/build/static/avrasm-AOIVGwnb.js +0 -1
  536. package/web-ui/build/static/avro-idl-CcPf6wBK.js +0 -1
  537. package/web-ui/build/static/awk-Dy8_cKla.js +0 -1
  538. package/web-ui/build/static/axapta-CexCCXgI.js +0 -1
  539. package/web-ui/build/static/bash-DKgFZb-B.js +0 -1
  540. package/web-ui/build/static/bash-DrUQRf4E.js +0 -1
  541. package/web-ui/build/static/basic-BXDUD6us.js +0 -1
  542. package/web-ui/build/static/basic-DlEL_-PG.js +0 -1
  543. package/web-ui/build/static/batch-HHuRbek7.js +0 -1
  544. package/web-ui/build/static/bbcode-D4lEyfHq.js +0 -1
  545. package/web-ui/build/static/bicep-Ca66VjcC.js +0 -1
  546. package/web-ui/build/static/birb-BWDnQG3-.js +0 -1
  547. package/web-ui/build/static/bison-DGEvuoCn.js +0 -1
  548. package/web-ui/build/static/bnf-DNrgnFxK.js +0 -1
  549. package/web-ui/build/static/bnf-DkGg9a6f.js +0 -1
  550. package/web-ui/build/static/brainfuck-BcC5WVuw.js +0 -1
  551. package/web-ui/build/static/brainfuck-Dzx6V6EF.js +0 -1
  552. package/web-ui/build/static/brightscript-26Asmy4_.js +0 -1
  553. package/web-ui/build/static/bro-CFV9ava2.js +0 -1
  554. package/web-ui/build/static/bsl-BHMAYVVg.js +0 -1
  555. package/web-ui/build/static/c-B7WGfC_g.js +0 -1
  556. package/web-ui/build/static/c-CUYmQ5h3.js +0 -1
  557. package/web-ui/build/static/c-like-BSddZquS.js +0 -1
  558. package/web-ui/build/static/cal-DQjwjuMG.js +0 -1
  559. package/web-ui/build/static/capnproto-CBnYJDMr.js +0 -1
  560. package/web-ui/build/static/ceylon-ce3L4vqX.js +0 -1
  561. package/web-ui/build/static/cfscript-CN8IKzxH.js +0 -1
  562. package/web-ui/build/static/chaiscript-DT-qasen.js +0 -1
  563. package/web-ui/build/static/cil-BPu0-6KT.js +0 -1
  564. package/web-ui/build/static/clean-BWcUgtLl.js +0 -1
  565. package/web-ui/build/static/clojure-CVLbUcEn.js +0 -1
  566. package/web-ui/build/static/clojure-mVJcgmKZ.js +0 -1
  567. package/web-ui/build/static/clojure-repl-B1bPQUgE.js +0 -1
  568. package/web-ui/build/static/cmake-ApAYr4_A.js +0 -1
  569. package/web-ui/build/static/cmake-oI81UP1F.js +0 -1
  570. package/web-ui/build/static/cobol-eZdxawKH.js +0 -1
  571. package/web-ui/build/static/coffeescript-BvFq14Nz.js +0 -1
  572. package/web-ui/build/static/coffeescript-CedrhcbC.js +0 -1
  573. package/web-ui/build/static/concurnas-8QctO6Q7.js +0 -1
  574. package/web-ui/build/static/coq-CaQMtKys.js +0 -1
  575. package/web-ui/build/static/coq-Di7lBRJy.js +0 -1
  576. package/web-ui/build/static/cos-3TjiDgk1.js +0 -1
  577. package/web-ui/build/static/cpp-BGwIhR_y.js +0 -1
  578. package/web-ui/build/static/cpp-CRXTx1YD.js +0 -1
  579. package/web-ui/build/static/crmsh-C67REd2u.js +0 -1
  580. package/web-ui/build/static/crystal-C8Rs5smk.js +0 -1
  581. package/web-ui/build/static/crystal-C8jnpN4t.js +0 -1
  582. package/web-ui/build/static/csharp-CqlFLWOu.js +0 -1
  583. package/web-ui/build/static/csharp-D1M9LcKj.js +0 -1
  584. package/web-ui/build/static/cshtml-BrYce3m1.js +0 -1
  585. package/web-ui/build/static/csp-DaMDae_q.js +0 -1
  586. package/web-ui/build/static/csp-DmoB74Pq.js +0 -1
  587. package/web-ui/build/static/css-Bm-MgPWM.js +0 -1
  588. package/web-ui/build/static/css-extras-T3f2IfaH.js +0 -1
  589. package/web-ui/build/static/csv-BgIvUIgl.js +0 -1
  590. package/web-ui/build/static/cypher-Bsq4PGhM.js +0 -1
  591. package/web-ui/build/static/d-Qt9QuUvk.js +0 -1
  592. package/web-ui/build/static/d-h4AYkhsS.js +0 -1
  593. package/web-ui/build/static/dart-DNDTBaSF.js +0 -1
  594. package/web-ui/build/static/dart-Dkg8Mtqj.js +0 -1
  595. package/web-ui/build/static/dataweave-XNvXnB4j.js +0 -1
  596. package/web-ui/build/static/dax-DAM3HOsu.js +0 -1
  597. package/web-ui/build/static/delphi-DTzj2E4U.js +0 -1
  598. package/web-ui/build/static/dhall-Brb1ufqF.js +0 -1
  599. package/web-ui/build/static/diff-3SMw9VwF.js +0 -1
  600. package/web-ui/build/static/diff-ssu7Mr2I.js +0 -1
  601. package/web-ui/build/static/django-CK_xvPUY.js +0 -1
  602. package/web-ui/build/static/django-D9a4uL_8.js +0 -1
  603. package/web-ui/build/static/dns-Uvea7PR7.js +0 -1
  604. package/web-ui/build/static/dns-zone-file-BvD_LLn3.js +0 -1
  605. package/web-ui/build/static/docker-CC3kvxlv.js +0 -1
  606. package/web-ui/build/static/dockerfile-BRFh_Hdm.js +0 -1
  607. package/web-ui/build/static/dos-C-I0-qWQ.js +0 -1
  608. package/web-ui/build/static/dot-BmS_Nrtr.js +0 -1
  609. package/web-ui/build/static/dsconfig-CBWgrIVa.js +0 -1
  610. package/web-ui/build/static/dts-B31mUIV6.js +0 -1
  611. package/web-ui/build/static/dust-BBtJv286.js +0 -1
  612. package/web-ui/build/static/ebnf-CCA0ITCE.js +0 -1
  613. package/web-ui/build/static/ebnf-CeVJpQny.js +0 -1
  614. package/web-ui/build/static/editorconfig-Nhj95Qci.js +0 -1
  615. package/web-ui/build/static/eiffel-E7QJBlEz.js +0 -1
  616. package/web-ui/build/static/ejs-B9gYRoXo.js +0 -1
  617. package/web-ui/build/static/elixir-CYG1GGGp.js +0 -1
  618. package/web-ui/build/static/elixir-fNfEypj7.js +0 -1
  619. package/web-ui/build/static/elm-Td6N7vMU.js +0 -1
  620. package/web-ui/build/static/elm-v0-mxxuQ.js +0 -1
  621. package/web-ui/build/static/erb-BO3LQtQx.js +0 -1
  622. package/web-ui/build/static/erb-ez_pDLEC.js +0 -1
  623. package/web-ui/build/static/erlang-ChOZ-mbI.js +0 -1
  624. package/web-ui/build/static/erlang-DCBIueE-.js +0 -1
  625. package/web-ui/build/static/erlang-repl-CL0-sGxn.js +0 -1
  626. package/web-ui/build/static/etlua-CQdh26X0.js +0 -1
  627. package/web-ui/build/static/excel-BbAj2wuJ.js +0 -1
  628. package/web-ui/build/static/excel-formula-qBXUIcjs.js +0 -1
  629. package/web-ui/build/static/factor-BPO68YSz.js +0 -1
  630. package/web-ui/build/static/false-sZ2iLGj-.js +0 -1
  631. package/web-ui/build/static/firestore-security-rules-BmYLiQGh.js +0 -1
  632. package/web-ui/build/static/fix-Co_Dnq0A.js +0 -1
  633. package/web-ui/build/static/flix-DlEWTbVq.js +0 -1
  634. package/web-ui/build/static/flow-DnsnnZca.js +0 -1
  635. package/web-ui/build/static/fortran-B4OMllck.js +0 -1
  636. package/web-ui/build/static/fortran-_8ltaoLA.js +0 -1
  637. package/web-ui/build/static/fsharp-CY0Ix1iB.js +0 -1
  638. package/web-ui/build/static/fsharp-y6HOJqAr.js +0 -1
  639. package/web-ui/build/static/ftl-DvbP9VWU.js +0 -1
  640. package/web-ui/build/static/gams-DF3rxJoc.js +0 -1
  641. package/web-ui/build/static/gap-BSje56C-.js +0 -1
  642. package/web-ui/build/static/gauss-BqYXtLWM.js +0 -1
  643. package/web-ui/build/static/gcode-CBl-mAWK.js +0 -1
  644. package/web-ui/build/static/gcode-idSM0RsM.js +0 -1
  645. package/web-ui/build/static/gdscript-CniY3oYY.js +0 -1
  646. package/web-ui/build/static/gedcom-C1dJ3jCP.js +0 -1
  647. package/web-ui/build/static/gherkin-4jaQr3Lt.js +0 -1
  648. package/web-ui/build/static/gherkin-BRsS35Ed.js +0 -1
  649. package/web-ui/build/static/git-2a7wzptj.js +0 -1
  650. package/web-ui/build/static/glsl-Ckv4lBKB.js +0 -1
  651. package/web-ui/build/static/glsl-CnGjBp6a.js +0 -1
  652. package/web-ui/build/static/gml-DG3KVI4z.js +0 -1
  653. package/web-ui/build/static/gml-DxKOOp--.js +0 -1
  654. package/web-ui/build/static/gn-DmUPMuZR.js +0 -1
  655. package/web-ui/build/static/go-D8tYdcYa.js +0 -1
  656. package/web-ui/build/static/go-DpIavxCs.js +0 -1
  657. package/web-ui/build/static/go-module-BktUPko9.js +0 -1
  658. package/web-ui/build/static/golo-Ao-diOpI.js +0 -1
  659. package/web-ui/build/static/gradle-DHJSdPoJ.js +0 -1
  660. package/web-ui/build/static/graphql-HpsdbKFp.js +0 -1
  661. package/web-ui/build/static/groovy-B4BrZYtV.js +0 -1
  662. package/web-ui/build/static/groovy-BCIRzoWJ.js +0 -1
  663. package/web-ui/build/static/haml-B8Mj6Hex.js +0 -1
  664. package/web-ui/build/static/haml-Fo-yynuy.js +0 -1
  665. package/web-ui/build/static/handlebars-BnFawcCU.js +0 -1
  666. package/web-ui/build/static/handlebars-YZn3MEyv.js +0 -1
  667. package/web-ui/build/static/haskell-DutAI7D9.js +0 -1
  668. package/web-ui/build/static/haskell-Dvl0Yw7z.js +0 -1
  669. package/web-ui/build/static/haxe-6S205Iem.js +0 -1
  670. package/web-ui/build/static/haxe-aKgbIDi5.js +0 -1
  671. package/web-ui/build/static/hcl-Dt_vNekv.js +0 -1
  672. package/web-ui/build/static/hlsl-CupXb_iv.js +0 -1
  673. package/web-ui/build/static/hoon-Dg19YEzw.js +0 -1
  674. package/web-ui/build/static/hpkp-DCF8Ff3o.js +0 -1
  675. package/web-ui/build/static/hsp-D90yiizY.js +0 -1
  676. package/web-ui/build/static/hsts-Cf63XX0s.js +0 -1
  677. package/web-ui/build/static/htmlbars-DMbRiSo_.js +0 -1
  678. package/web-ui/build/static/http-DklRfzP4.js +0 -1
  679. package/web-ui/build/static/http-U94aUtJB.js +0 -1
  680. package/web-ui/build/static/hy-B2ESVqxB.js +0 -1
  681. package/web-ui/build/static/ichigojam-DrVZWL_q.js +0 -1
  682. package/web-ui/build/static/icon-CMA5sxLF.js +0 -1
  683. package/web-ui/build/static/icu-message-format-DyfbEZSi.js +0 -1
  684. package/web-ui/build/static/idris-lCmRODnZ.js +0 -1
  685. package/web-ui/build/static/iecst-CgrrW0EE.js +0 -1
  686. package/web-ui/build/static/ignore-BmZ03AWS.js +0 -1
  687. package/web-ui/build/static/index-CLLrOcOY.js +0 -1
  688. package/web-ui/build/static/index-Ck0Dg4M1.js +0 -13
  689. package/web-ui/build/static/index-DOAQiM34.css +0 -1
  690. package/web-ui/build/static/index-DjtEf-qv.js +0 -1029
  691. package/web-ui/build/static/inform7-BfOnAvVe.js +0 -1
  692. package/web-ui/build/static/inform7-JJIIMXTB.js +0 -1
  693. package/web-ui/build/static/ini-CIKxMbKN.js +0 -1
  694. package/web-ui/build/static/ini-T3DdG5H-.js +0 -1
  695. package/web-ui/build/static/io-K9Gdeq6M.js +0 -1
  696. package/web-ui/build/static/irpf90-BYsCcwwg.js +0 -1
  697. package/web-ui/build/static/isbl-jcjEwPPP.js +0 -1
  698. package/web-ui/build/static/j-DSNUhn5G.js +0 -1
  699. package/web-ui/build/static/java-BKwYwPEk.js +0 -1
  700. package/web-ui/build/static/java-DuZuc1lQ.js +0 -1
  701. package/web-ui/build/static/javadoc-Bd8CYqmj.js +0 -1
  702. package/web-ui/build/static/javadoclike-BcPQURih.js +0 -1
  703. package/web-ui/build/static/javascript-C7B2Ty3f.js +0 -1
  704. package/web-ui/build/static/javastacktrace-BRZBpTgb.js +0 -1
  705. package/web-ui/build/static/jboss-cli-DaXYYeAA.js +0 -1
  706. package/web-ui/build/static/jexl-oN152m0J.js +0 -1
  707. package/web-ui/build/static/jolie-BUWtG9eQ.js +0 -1
  708. package/web-ui/build/static/jq-ooTdhdbC.js +0 -1
  709. package/web-ui/build/static/js-extras-BQJ_tqbC.js +0 -1
  710. package/web-ui/build/static/js-templates-xygrVmsG.js +0 -1
  711. package/web-ui/build/static/jsdoc-BPMuWUGw.js +0 -1
  712. package/web-ui/build/static/json-DbssHgO1.js +0 -1
  713. package/web-ui/build/static/json-iOY4SV10.js +0 -1
  714. package/web-ui/build/static/json5-C_-PZnKE.js +0 -1
  715. package/web-ui/build/static/jsonp-BQakabW1.js +0 -1
  716. package/web-ui/build/static/jsstacktrace-DyDuNLl8.js +0 -1
  717. package/web-ui/build/static/jsx-DCQITdOi.js +0 -1
  718. package/web-ui/build/static/julia-BF0mftpu.js +0 -1
  719. package/web-ui/build/static/julia-TT2Hy-Ob.js +0 -1
  720. package/web-ui/build/static/julia-repl-UBoVaQSD.js +0 -1
  721. package/web-ui/build/static/keepalived-yNkg9KNG.js +0 -1
  722. package/web-ui/build/static/keyman-7ModFC-k.js +0 -1
  723. package/web-ui/build/static/kotlin-BjJgl7UF.js +0 -1
  724. package/web-ui/build/static/kotlin-GEW2sNY3.js +0 -1
  725. package/web-ui/build/static/kumir-CeWMdLSX.js +0 -1
  726. package/web-ui/build/static/kusto-NufgjlVz.js +0 -1
  727. package/web-ui/build/static/lasso-eUS0tR3e.js +0 -1
  728. package/web-ui/build/static/latex-C7prlA6j.js +0 -1
  729. package/web-ui/build/static/latex-Hx35xemv.js +0 -1
  730. package/web-ui/build/static/latte-Da8RAWgh.js +0 -1
  731. package/web-ui/build/static/ldif-DZVoiKm3.js +0 -1
  732. package/web-ui/build/static/leaf-OEtu9dZj.js +0 -1
  733. package/web-ui/build/static/less-0VwiOSeL.js +0 -1
  734. package/web-ui/build/static/less-CciyvbHx.js +0 -1
  735. package/web-ui/build/static/lilypond-blLDi6bC.js +0 -1
  736. package/web-ui/build/static/liquid-C8_7pWOo.js +0 -1
  737. package/web-ui/build/static/lisp-Dd28CPVg.js +0 -1
  738. package/web-ui/build/static/lisp-hWkYuWd0.js +0 -1
  739. package/web-ui/build/static/livecodeserver-7_v3dVy3.js +0 -1
  740. package/web-ui/build/static/livescript-B8YdZ4uV.js +0 -1
  741. package/web-ui/build/static/livescript-dLNrctPK.js +0 -1
  742. package/web-ui/build/static/llvm-BfTyXy_G.js +0 -1
  743. package/web-ui/build/static/llvm-CLvUvWLu.js +0 -1
  744. package/web-ui/build/static/log-DbsxiU9k.js +0 -1
  745. package/web-ui/build/static/lolcode-CfacgPRH.js +0 -1
  746. package/web-ui/build/static/lsl-nJWe_8hA.js +0 -1
  747. package/web-ui/build/static/lua-BzXX-n4X.js +0 -1
  748. package/web-ui/build/static/lua-Ds6K-rhW.js +0 -1
  749. package/web-ui/build/static/magma-U4RmSh9f.js +0 -1
  750. package/web-ui/build/static/makefile-CSCW5rGm.js +0 -1
  751. package/web-ui/build/static/makefile-kzE_oEn3.js +0 -1
  752. package/web-ui/build/static/markdown-CalHH_DC.js +0 -1
  753. package/web-ui/build/static/markdown-Cqr_u0Ad.js +0 -1
  754. package/web-ui/build/static/markup-templating-BTOI73DQ.js +0 -1
  755. package/web-ui/build/static/mathematica-NX1KG9I0.js +0 -1
  756. package/web-ui/build/static/matlab-BAn1HwNV.js +0 -1
  757. package/web-ui/build/static/matlab-Bdg2LWPm.js +0 -1
  758. package/web-ui/build/static/maxima-DjRYVgK8.js +0 -1
  759. package/web-ui/build/static/maxscript-xwiWU5-Z.js +0 -1
  760. package/web-ui/build/static/mel-BgwB0sDS.js +0 -1
  761. package/web-ui/build/static/mel-CIouMI9e.js +0 -1
  762. package/web-ui/build/static/mercury-Do8hrPEb.js +0 -1
  763. package/web-ui/build/static/mermaid-BGEw9Ybx.js +0 -1
  764. package/web-ui/build/static/mipsasm-BDqQqoDE.js +0 -1
  765. package/web-ui/build/static/mizar-7lZfUsYd.js +0 -1
  766. package/web-ui/build/static/mizar-D7O18zEE.js +0 -1
  767. package/web-ui/build/static/mojolicious-DqmJjzUO.js +0 -1
  768. package/web-ui/build/static/mongodb-CXRl7RlT.js +0 -1
  769. package/web-ui/build/static/monkey-DE9L51qk.js +0 -1
  770. package/web-ui/build/static/monkey-DM9WNqkW.js +0 -1
  771. package/web-ui/build/static/moonscript-D8lRTdQE.js +0 -1
  772. package/web-ui/build/static/moonscript-DFEVxKjh.js +0 -1
  773. package/web-ui/build/static/n1ql-B3BB__pa.js +0 -1
  774. package/web-ui/build/static/n1ql-Br4OECGn.js +0 -1
  775. package/web-ui/build/static/n4js-BPNwKp4U.js +0 -1
  776. package/web-ui/build/static/nand2tetris-hdl-BrjXXFUn.js +0 -1
  777. package/web-ui/build/static/naniscript-COGKQbvR.js +0 -1
  778. package/web-ui/build/static/nasm-BHOt34Wi.js +0 -1
  779. package/web-ui/build/static/neon-CYjyYixT.js +0 -1
  780. package/web-ui/build/static/nevod-CILFZbPW.js +0 -1
  781. package/web-ui/build/static/nginx-B7B9La6b.js +0 -1
  782. package/web-ui/build/static/nginx-Dcs1btfu.js +0 -1
  783. package/web-ui/build/static/nim-B39Qq_sB.js +0 -1
  784. package/web-ui/build/static/nim-Cm0o-zEI.js +0 -1
  785. package/web-ui/build/static/nix-Bb4CX-fQ.js +0 -1
  786. package/web-ui/build/static/nix-C3bIutdy.js +0 -1
  787. package/web-ui/build/static/node-repl-BtbNtavi.js +0 -1
  788. package/web-ui/build/static/nsis-CJpMkpQy.js +0 -1
  789. package/web-ui/build/static/nsis-h39nQk_L.js +0 -1
  790. package/web-ui/build/static/objectivec-BIV3Kmu2.js +0 -1
  791. package/web-ui/build/static/objectivec-CNhpMYiK.js +0 -1
  792. package/web-ui/build/static/ocaml-Ld6KARDY.js +0 -1
  793. package/web-ui/build/static/ocaml-upCImTLO.js +0 -1
  794. package/web-ui/build/static/opencl-CfWJp1hT.js +0 -1
  795. package/web-ui/build/static/openqasm-i8xT4CAo.js +0 -1
  796. package/web-ui/build/static/openscad-CzWxpIx6.js +0 -1
  797. package/web-ui/build/static/oxygene-CCokKj_U.js +0 -1
  798. package/web-ui/build/static/oz-BBdHXCgw.js +0 -1
  799. package/web-ui/build/static/parigp-C6n5F4KO.js +0 -1
  800. package/web-ui/build/static/parser-C2RrTYYO.js +0 -1
  801. package/web-ui/build/static/parser3-BaAVXypg.js +0 -1
  802. package/web-ui/build/static/pascal-UeXMBbP2.js +0 -1
  803. package/web-ui/build/static/pascaligo-CYD4ZqHc.js +0 -1
  804. package/web-ui/build/static/pcaxis-CuN2yCzi.js +0 -1
  805. package/web-ui/build/static/peoplecode-H1Adh-ll.js +0 -1
  806. package/web-ui/build/static/perl-DCyTMUn2.js +0 -1
  807. package/web-ui/build/static/perl-V4mDd6YP.js +0 -1
  808. package/web-ui/build/static/pf-5iH6Mo1D.js +0 -1
  809. package/web-ui/build/static/pgsql-CrmNuytU.js +0 -1
  810. package/web-ui/build/static/php-AWteRwUZ.js +0 -1
  811. package/web-ui/build/static/php-B-dr82M2.js +0 -1
  812. package/web-ui/build/static/php-extras-CVQI7yIC.js +0 -1
  813. package/web-ui/build/static/php-template-BW_DclRa.js +0 -1
  814. package/web-ui/build/static/phpdoc-Cfv3EM5F.js +0 -1
  815. package/web-ui/build/static/plaintext-CyfmYRWM.js +0 -1
  816. package/web-ui/build/static/plsql-DIfiFLDw.js +0 -1
  817. package/web-ui/build/static/pony-DjBwB1l2.js +0 -1
  818. package/web-ui/build/static/powerquery-D80luSMu.js +0 -1
  819. package/web-ui/build/static/powershell-Cai1oPSE.js +0 -1
  820. package/web-ui/build/static/powershell-qk5MHehm.js +0 -1
  821. package/web-ui/build/static/processing-DGNtNe05.js +0 -1
  822. package/web-ui/build/static/processing-DHK3kwAe.js +0 -1
  823. package/web-ui/build/static/profile-D6MBLt-p.js +0 -1
  824. package/web-ui/build/static/prolog-CqKHjX9T.js +0 -1
  825. package/web-ui/build/static/prolog-CwAlj8yp.js +0 -1
  826. package/web-ui/build/static/promql-Cwo7B1q9.js +0 -1
  827. package/web-ui/build/static/properties-03DbKSuC.js +0 -1
  828. package/web-ui/build/static/properties-BlFjiqSF.js +0 -1
  829. package/web-ui/build/static/protobuf-DFZRRGno.js +0 -1
  830. package/web-ui/build/static/protobuf-D_GKOSo6.js +0 -1
  831. package/web-ui/build/static/psl-RSBmgd7b.js +0 -1
  832. package/web-ui/build/static/pug-DzBjT8h1.js +0 -1
  833. package/web-ui/build/static/puppet-BwyNySh7.js +0 -1
  834. package/web-ui/build/static/puppet-CHJRn6Na.js +0 -1
  835. package/web-ui/build/static/pure-XbBeN0U7.js +0 -1
  836. package/web-ui/build/static/purebasic-BeRgP1y5.js +0 -1
  837. package/web-ui/build/static/purebasic-XGD8k1X_.js +0 -1
  838. package/web-ui/build/static/purescript-DPej8C9k.js +0 -1
  839. package/web-ui/build/static/python-DK4CPbFS.js +0 -1
  840. package/web-ui/build/static/python-repl-BDrlZxhA.js +0 -1
  841. package/web-ui/build/static/python-sRExKvGw.js +0 -1
  842. package/web-ui/build/static/q-B8K1uEtE.js +0 -1
  843. package/web-ui/build/static/q-iptUl3TG.js +0 -1
  844. package/web-ui/build/static/qml-Ck-8E28D.js +0 -1
  845. package/web-ui/build/static/qml-DapR8Kud.js +0 -1
  846. package/web-ui/build/static/qore-Bq2u6ALt.js +0 -1
  847. package/web-ui/build/static/qsharp-C9FGwAhI.js +0 -1
  848. package/web-ui/build/static/r-B8PZ1lyW.js +0 -1
  849. package/web-ui/build/static/r-jsXxivRe.js +0 -1
  850. package/web-ui/build/static/racket-BW1YY6oG.js +0 -1
  851. package/web-ui/build/static/reason-CGrwEH7Y.js +0 -1
  852. package/web-ui/build/static/reasonml-D2S9u5tv.js +0 -1
  853. package/web-ui/build/static/regex-Bx_rkaF-.js +0 -1
  854. package/web-ui/build/static/rego-DYSQb1aU.js +0 -1
  855. package/web-ui/build/static/renpy-DoEOEpqT.js +0 -1
  856. package/web-ui/build/static/rest-6xfrLQ1u.js +0 -1
  857. package/web-ui/build/static/rib-BH2XAOdJ.js +0 -1
  858. package/web-ui/build/static/rip-BOcHDByA.js +0 -1
  859. package/web-ui/build/static/roboconf-8nB4fpob.js +0 -1
  860. package/web-ui/build/static/roboconf-BjKYzQ_Z.js +0 -1
  861. package/web-ui/build/static/robotframework-BIAT2wY6.js +0 -1
  862. package/web-ui/build/static/routeros-Bt6cTmB2.js +0 -1
  863. package/web-ui/build/static/rsl-XvWWVxz_.js +0 -1
  864. package/web-ui/build/static/ruby-CEfc9tVA.js +0 -1
  865. package/web-ui/build/static/ruby-CKNSKxB1.js +0 -1
  866. package/web-ui/build/static/ruleslanguage-tpn62qMj.js +0 -1
  867. package/web-ui/build/static/rust-Cb-H3ah6.js +0 -1
  868. package/web-ui/build/static/rust-CmAiRDXU.js +0 -1
  869. package/web-ui/build/static/sas-6JRKVKN4.js +0 -1
  870. package/web-ui/build/static/sas-BnSXGxyB.js +0 -1
  871. package/web-ui/build/static/sass-RPp8p1Ef.js +0 -1
  872. package/web-ui/build/static/scala-BjZ--04s.js +0 -1
  873. package/web-ui/build/static/scala-CbHbqC82.js +0 -1
  874. package/web-ui/build/static/scheme-51taSudc.js +0 -1
  875. package/web-ui/build/static/scheme-FF2J1d7z.js +0 -1
  876. package/web-ui/build/static/scilab-CSU1i7r7.js +0 -1
  877. package/web-ui/build/static/scss-Bf9-1Rwp.js +0 -1
  878. package/web-ui/build/static/scss-kWs2GBCV.js +0 -1
  879. package/web-ui/build/static/shell-B6aH0_VB.js +0 -1
  880. package/web-ui/build/static/shell-session-42tFBoqK.js +0 -1
  881. package/web-ui/build/static/smali-BTC2VGoh.js +0 -1
  882. package/web-ui/build/static/smali-CFCAUthF.js +0 -1
  883. package/web-ui/build/static/smalltalk-C4Z4p5Ld.js +0 -1
  884. package/web-ui/build/static/smalltalk-DS9teHSb.js +0 -1
  885. package/web-ui/build/static/smarty-9tLXgYFw.js +0 -1
  886. package/web-ui/build/static/sml-CvQCOzHl.js +0 -1
  887. package/web-ui/build/static/sml-D7VN7gLP.js +0 -1
  888. package/web-ui/build/static/solidity-C8mgaeFG.js +0 -1
  889. package/web-ui/build/static/solution-file-BW6eSi9-.js +0 -1
  890. package/web-ui/build/static/soy-iYu8WojY.js +0 -1
  891. package/web-ui/build/static/sparql-fr7u_sdF.js +0 -1
  892. package/web-ui/build/static/splunk-spl-C1ELr7BN.js +0 -1
  893. package/web-ui/build/static/sqf-8e9uVb30.js +0 -1
  894. package/web-ui/build/static/sqf-CWavw2F4.js +0 -1
  895. package/web-ui/build/static/sql-DC_QvrP2.js +0 -1
  896. package/web-ui/build/static/sql-yLctL19P.js +0 -1
  897. package/web-ui/build/static/sql_more-KfXMatfe.js +0 -1
  898. package/web-ui/build/static/squirrel-Bjd69daG.js +0 -1
  899. package/web-ui/build/static/stan-CaplZnB-.js +0 -1
  900. package/web-ui/build/static/stan-UYitmAjw.js +0 -1
  901. package/web-ui/build/static/stata-Beng42ZG.js +0 -1
  902. package/web-ui/build/static/step21-jqm1hcSr.js +0 -1
  903. package/web-ui/build/static/stylus-DB7RdP7s.js +0 -1
  904. package/web-ui/build/static/stylus-IFC9sMcH.js +0 -1
  905. package/web-ui/build/static/subunit-B75tNAV5.js +0 -1
  906. package/web-ui/build/static/swift-BRcicKMn.js +0 -1
  907. package/web-ui/build/static/swift-s8OoLWy_.js +0 -1
  908. package/web-ui/build/static/systemd-BC7VQvFw.js +0 -1
  909. package/web-ui/build/static/t4-cs-C6aVcIEq.js +0 -1
  910. package/web-ui/build/static/t4-templating-cVFAPDZQ.js +0 -1
  911. package/web-ui/build/static/t4-vb-DwpqTEJL.js +0 -1
  912. package/web-ui/build/static/taggerscript-GaB8ayWT.js +0 -1
  913. package/web-ui/build/static/tap-DN_-tQNk.js +0 -1
  914. package/web-ui/build/static/tap-XgwFSVSK.js +0 -1
  915. package/web-ui/build/static/tcl-D6eT7YQe.js +0 -1
  916. package/web-ui/build/static/tcl-DiEmh3pJ.js +0 -1
  917. package/web-ui/build/static/textile-cNMT-4v2.js +0 -1
  918. package/web-ui/build/static/thrift-DTgTgcBm.js +0 -1
  919. package/web-ui/build/static/toml-B8XPB_4B.js +0 -1
  920. package/web-ui/build/static/tp-NpmS9CLR.js +0 -1
  921. package/web-ui/build/static/tremor-OVZ172ee.js +0 -1
  922. package/web-ui/build/static/tsx-B1xtIV1E.js +0 -1
  923. package/web-ui/build/static/tt2-DITHT_e6.js +0 -1
  924. package/web-ui/build/static/turtle-D3IrO7qu.js +0 -1
  925. package/web-ui/build/static/twig-Bwmu1-US.js +0 -1
  926. package/web-ui/build/static/twig-CmWIdHrv.js +0 -1
  927. package/web-ui/build/static/typescript-BI4GgjOm.js +0 -1
  928. package/web-ui/build/static/typescript-D6hycyND.js +0 -1
  929. package/web-ui/build/static/typoscript-5S0Q3h4I.js +0 -1
  930. package/web-ui/build/static/unrealscript-CaROCOEp.js +0 -1
  931. package/web-ui/build/static/uorazor-VyIQ6lvW.js +0 -1
  932. package/web-ui/build/static/uri-DDdjLj4-.js +0 -1
  933. package/web-ui/build/static/v-CzPHqjdM.js +0 -1
  934. package/web-ui/build/static/vala-CRK3Oxn2.js +0 -1
  935. package/web-ui/build/static/vala-DTG5j_IY.js +0 -1
  936. package/web-ui/build/static/vbnet-C6z8S410.js +0 -1
  937. package/web-ui/build/static/vbnet-cWNTX8Og.js +0 -1
  938. package/web-ui/build/static/vbscript-CyA_PhGn.js +0 -1
  939. package/web-ui/build/static/vbscript-html-CidnweeC.js +0 -1
  940. package/web-ui/build/static/velocity-Dp6ZU1nS.js +0 -1
  941. package/web-ui/build/static/verilog-CilE-jD9.js +0 -1
  942. package/web-ui/build/static/verilog-RAde9Uda.js +0 -1
  943. package/web-ui/build/static/vhdl-CHS4lDo8.js +0 -1
  944. package/web-ui/build/static/vhdl-D5o9ErDa.js +0 -1
  945. package/web-ui/build/static/vim-B8jwaGJ6.js +0 -1
  946. package/web-ui/build/static/vim-BZrCpxwn.js +0 -1
  947. package/web-ui/build/static/visual-basic-By6WIP3n.js +0 -1
  948. package/web-ui/build/static/warpscript-BQF8R5WL.js +0 -1
  949. package/web-ui/build/static/wasm-DJyk23np.js +0 -1
  950. package/web-ui/build/static/web-idl-DezqVYtV.js +0 -1
  951. package/web-ui/build/static/wiki-CiJcHWqV.js +0 -1
  952. package/web-ui/build/static/wolfram-DjwPz6pa.js +0 -1
  953. package/web-ui/build/static/wren-lzb3aV3F.js +0 -1
  954. package/web-ui/build/static/x86asm-CCNfO4dU.js +0 -1
  955. package/web-ui/build/static/xeora-CRaNjAb0.js +0 -1
  956. package/web-ui/build/static/xl-CRqWPyuc.js +0 -1
  957. package/web-ui/build/static/xml-Uuta5J77.js +0 -1
  958. package/web-ui/build/static/xml-doc-Drc3ho9Y.js +0 -1
  959. package/web-ui/build/static/xojo-D2WT5Q0J.js +0 -1
  960. package/web-ui/build/static/xquery-CwB9Zxcf.js +0 -1
  961. package/web-ui/build/static/xquery-DA5NuZxN.js +0 -1
  962. package/web-ui/build/static/yaml-DJMpA9ia.js +0 -1
  963. package/web-ui/build/static/yaml-DxiY0s1_.js +0 -1
  964. package/web-ui/build/static/yang-DPrwGYlZ.js +0 -1
  965. package/web-ui/build/static/zephir-DOfPWp4I.js +0 -1
  966. package/web-ui/build/static/zig-BE1mX447.js +0 -1
@@ -0,0 +1,854 @@
1
+ /**
2
+ * PlatformControlTool — agent-facing control over Loxia platform features.
3
+ *
4
+ * Designed as a single tool that grows by ADDING sub-features (each with
5
+ * its own permission key) rather than spawning new tools. Today's surface:
6
+ * - Scheduled tasks (CRUD + trigger + self-resume convenience)
7
+ *
8
+ * Permission model — per-agent, per-feature, three levels:
9
+ * - 'disabled' (default): the agent cannot use the feature
10
+ * - 'own': only this agent's own agent-target schedules
11
+ * - 'all': all agent-target schedules (admin scope)
12
+ *
13
+ * Flow-target schedules are NEVER reachable here, regardless of level —
14
+ * agents do not (currently) control flows. See permissions.js for the
15
+ * security boundary; THIS file just dispatches actions.
16
+ *
17
+ * Per-agent config shape:
18
+ * agent.toolConfig.platformcontrol = {
19
+ * scheduledTasks: 'disabled' | 'own' | 'all', // default 'disabled'
20
+ * // future features get their own keys here
21
+ * }
22
+ */
23
+
24
+ import { BaseTool } from './baseTool.js';
25
+ import {
26
+ SCHEDULE_ACCESS_LEVELS,
27
+ getScheduleAccessLevel,
28
+ checkScheduleAccess,
29
+ filterAccessibleSchedules,
30
+ AGENT_ACCESS_LEVELS,
31
+ getAgentAccessLevel,
32
+ getMaxAgentsCreated,
33
+ checkAgentMutationAccess,
34
+ clampToolConfigForChild,
35
+ getTeamScope,
36
+ isTeamAccessDisabled,
37
+ checkTeamAccess,
38
+ filterAccessibleTeams,
39
+ } from './platformControl/permissions.js';
40
+ import { isProtectedFromCaller, makeAgentLookup } from './platformControl/ancestry.js';
41
+ import { cascadeDeleteAgent, cascadeDeleteTeam } from './platformControl/cascadeService.js';
42
+
43
+ const SUPPORTED_ACTIONS = [
44
+ 'list-capabilities',
45
+ // Scheduled tasks
46
+ 'list-schedules',
47
+ 'get-schedule',
48
+ 'create-schedule',
49
+ 'update-schedule',
50
+ 'delete-schedule',
51
+ 'toggle-schedule',
52
+ 'trigger-schedule',
53
+ 'list-presets',
54
+ // Convenience: one-shot self-resume schedule (TODO: rethink — currently
55
+ // a thin wrapper around create-schedule with runOnce + cron derived from
56
+ // a future ISO datetime. May become a first-class `wakeAt` primitive
57
+ // once we see how agents actually use it.)
58
+ 'schedule-self-resume',
59
+ // Agent CRUD
60
+ 'list-agents',
61
+ 'create-agent',
62
+ 'update-agent',
63
+ 'delete-agent',
64
+ // Team CRUD + membership
65
+ 'list-teams',
66
+ 'create-team',
67
+ 'update-team',
68
+ 'delete-team',
69
+ 'add-team-member',
70
+ 'remove-team-member',
71
+ ];
72
+
73
+ /**
74
+ * Convert an ISO datetime in the FUTURE into a one-shot cron expression.
75
+ * Cron resolution is one minute, so we round down to the matching minute.
76
+ * Returns the cron string and a normalized ISO so the caller can echo it.
77
+ *
78
+ * Throws on invalid input or past times — this is user-visible feedback,
79
+ * not a silent fallback.
80
+ */
81
+ function isoToOneShotCron(runAt) {
82
+ if (typeof runAt !== 'string' || !runAt.trim()) {
83
+ throw new Error('runAt must be an ISO datetime string');
84
+ }
85
+ const d = new Date(runAt);
86
+ if (Number.isNaN(d.getTime())) {
87
+ throw new Error(`runAt is not a valid datetime: "${runAt}"`);
88
+ }
89
+ // Round down to the minute — cron resolution.
90
+ d.setSeconds(0, 0);
91
+ if (d.getTime() <= Date.now()) {
92
+ throw new Error('runAt must be at least one minute in the future');
93
+ }
94
+ const cron = `${d.getMinutes()} ${d.getHours()} ${d.getDate()} ${d.getMonth() + 1} *`;
95
+ return { cron, normalizedIso: d.toISOString() };
96
+ }
97
+
98
+ class PlatformControlTool extends BaseTool {
99
+ constructor(config = {}, logger = null) {
100
+ super(config, logger);
101
+ this.id = 'platformcontrol';
102
+ this.requiresProject = false;
103
+ this.isAsync = false;
104
+
105
+ /** @type {object|null} */ this.scheduleService = null;
106
+ /** @type {object|null} */ this.agentPool = null;
107
+ /** @type {object|null} */ this.stateManager = null;
108
+ /** @type {object|null} */ this.memoryService = null;
109
+ }
110
+
111
+ /** Injected from src/index.js after ScheduleService is initialized. */
112
+ setScheduleService(scheduleService) {
113
+ this.scheduleService = scheduleService;
114
+ this.logger?.info?.(`[platformcontrol] ScheduleService ${scheduleService ? 'attached' : 'detached'}`);
115
+ }
116
+
117
+ /** Injected — needed for agent CRUD + ancestry walks. */
118
+ setAgentPool(agentPool) {
119
+ this.agentPool = agentPool;
120
+ this.logger?.info?.(`[platformcontrol] AgentPool ${agentPool ? 'attached' : 'detached'}`);
121
+ }
122
+
123
+ /** Injected — needed for team CRUD + membership cascade cleanup. */
124
+ setStateManager(stateManager) {
125
+ this.stateManager = stateManager;
126
+ this.logger?.info?.(`[platformcontrol] StateManager ${stateManager ? 'attached' : 'detached'}`);
127
+ }
128
+
129
+ /** Injected — needed for memory cleanup on agent deletion. */
130
+ setMemoryService(memoryService) {
131
+ this.memoryService = memoryService;
132
+ this.logger?.info?.(`[platformcontrol] MemoryService ${memoryService ? 'attached' : 'detached'}`);
133
+ }
134
+
135
+ getDescription() {
136
+ return `
137
+ Platform Control Tool: control Loxia platform features (scheduled tasks today; more later).
138
+
139
+ Per-agent permission, default DISABLED. Configure in the tool configurator.
140
+
141
+ ACTIONS — scheduled tasks:
142
+ list-schedules — list schedules in scope
143
+ get-schedule { scheduleId } — fetch one schedule
144
+ create-schedule { name, prompt, cronExpression,
145
+ targetAgentId?, enabled?,
146
+ runOnce?, maxRuns?,
147
+ startDate?, endDate?, description? }
148
+ — create. targetAgentId defaults to self in 'own' mode.
149
+ Pass 'self' to explicitly target this agent.
150
+ update-schedule { scheduleId, ...updates } — patch fields (name, prompt, cron, enabled, etc.)
151
+ delete-schedule { scheduleId } — remove
152
+ toggle-schedule { scheduleId, enabled? } — flip enabled (or set if provided)
153
+ trigger-schedule { scheduleId } — fire NOW, out of band
154
+ list-presets — read-only list of cron presets
155
+ schedule-self-resume { runAt, prompt, name? } — one-shot schedule that wakes THIS agent
156
+ at runAt (ISO datetime, future, minute-resolution)
157
+ with the given prompt. TODO: under review.
158
+
159
+ ACTIONS — agents (per-agent permission: 'disabled' | 'self-created' | 'all'; default 'disabled'):
160
+ list-agents — list all agents (read is unrestricted at any non-disabled level)
161
+ create-agent { name, systemPrompt,
162
+ description?, model?, capabilities?,
163
+ skills?, toolConfig?,
164
+ directoryAccess? } — create a new agent. createdBy is set to YOU automatically.
165
+ Per-creator quota (maxAgentsCreated, default unlimited)
166
+ applies. Child's toolConfig.platformcontrol.* is CLAMPED
167
+ to your level (no privilege escalation).
168
+ update-agent { agentId, ...fields } — patch fields. Same clamp rule on toolConfig.
169
+ Hard rules: cannot target self; cannot target ancestors.
170
+ delete-agent { agentId } — cascade-delete: schedules, memories, team memberships,
171
+ then the agent itself.
172
+
173
+ ACTIONS — teams (per-agent multi-select scope: member / ownedByMe / all; default all-false = disabled):
174
+ list-teams — list teams reachable in your scope
175
+ create-team { name, description?, color? } — create. createdBy is set to YOU automatically.
176
+ update-team { teamId, name?, description?, color? }
177
+ delete-team { teamId } — removes the team; member assignments die with it.
178
+ add-team-member { teamId, agentId } — add an agent to a team. agentId='self' adds caller.
179
+ remove-team-member { teamId, agentId } — remove an agent. agentId='self' = leave the team.
180
+
181
+ list-capabilities — what permission level + scope this agent has
182
+
183
+ EXAMPLES:
184
+
185
+ # Wake me up tomorrow at 9am with a check-in prompt
186
+ {
187
+ "toolId": "platformcontrol",
188
+ "action": "schedule-self-resume",
189
+ "runAt": "2026-04-27T09:00:00Z",
190
+ "prompt": "Resume task: review yesterday's PR comments and respond.",
191
+ "name": "Morning PR review"
192
+ }
193
+
194
+ # Recurring agent-self schedule
195
+ {
196
+ "toolId": "platformcontrol",
197
+ "action": "create-schedule",
198
+ "name": "Hourly health check",
199
+ "prompt": "Run smoke tests and report status.",
200
+ "cronExpression": "0 * * * *",
201
+ "targetAgentId": "self"
202
+ }
203
+
204
+ # List my own schedules
205
+ { "toolId": "platformcontrol", "action": "list-schedules" }
206
+
207
+ NOTES:
208
+ - Flow schedules are NEVER reachable from this tool, regardless of permission level.
209
+ - 'self' is a sugar for the calling agent's id; explicit ids work too.
210
+ - cronExpression accepts the standard 5-field cron OR a preset name (call list-presets).
211
+ `;
212
+ }
213
+
214
+ getSupportedActions() { return [...SUPPORTED_ACTIONS]; }
215
+
216
+ async execute(params, context = {}) {
217
+ if (!params || typeof params !== 'object') {
218
+ return { success: false, error: 'params must be an object' };
219
+ }
220
+ const action = params.action || 'list-capabilities';
221
+ const callerAgentId = context?.agentId || null;
222
+
223
+ const cfg = this.getEffectiveConfig(context, {});
224
+ const level = getScheduleAccessLevel(cfg);
225
+
226
+ // list-capabilities is always allowed — agent needs to discover its
227
+ // own permissions even when scheduledTasks is 'disabled'.
228
+ if (action === 'list-capabilities') {
229
+ return this._listCapabilities(level, cfg);
230
+ }
231
+
232
+ // Per-feature gating: each action's permission lives in its own slice
233
+ // of toolConfig.platformcontrol. Schedule actions get scheduleLevel
234
+ // gating; agent / team actions handle their own gates inside their
235
+ // handlers (which need the full cfg anyway for the privilege clamp).
236
+ const isScheduleAction = action.includes('schedule') || action === 'list-presets';
237
+ if (isScheduleAction) {
238
+ if (level === SCHEDULE_ACCESS_LEVELS.DISABLED) {
239
+ return {
240
+ success: false,
241
+ disabled: true,
242
+ error: 'Scheduled-tasks access is disabled for this agent. Enable it in the platformcontrol tool configurator.',
243
+ };
244
+ }
245
+ if (!this.scheduleService) {
246
+ return { success: false, error: 'ScheduleService is not available on this server.' };
247
+ }
248
+ }
249
+
250
+ // IMPORTANT: `await` inside the try so async-handler rejections are
251
+ // caught here. Without await, a `return this._createSchedule(...)`
252
+ // hands an un-awaited Promise back; rejections propagate past this
253
+ // try/catch and surface as raw exceptions to the caller.
254
+ try {
255
+ switch (action) {
256
+ case 'list-schedules': return await this._listSchedules(level, callerAgentId);
257
+ case 'get-schedule': return await this._getSchedule(level, callerAgentId, params);
258
+ case 'create-schedule': return await this._createSchedule(level, callerAgentId, params);
259
+ case 'update-schedule': return await this._updateSchedule(level, callerAgentId, params);
260
+ case 'delete-schedule': return await this._deleteSchedule(level, callerAgentId, params);
261
+ case 'toggle-schedule': return await this._toggleSchedule(level, callerAgentId, params);
262
+ case 'trigger-schedule': return await this._triggerSchedule(level, callerAgentId, params);
263
+ case 'list-presets': return await this._listPresets();
264
+ case 'schedule-self-resume': return await this._scheduleSelfResume(level, callerAgentId, params);
265
+ // Agent CRUD
266
+ case 'list-agents': return await this._listAgents(cfg, callerAgentId);
267
+ case 'create-agent': return await this._createAgent(cfg, callerAgentId, params);
268
+ case 'update-agent': return await this._updateAgent(cfg, callerAgentId, params);
269
+ case 'delete-agent': return await this._deleteAgent(cfg, callerAgentId, params);
270
+ // Team CRUD + membership
271
+ case 'list-teams': return await this._listTeams(cfg, callerAgentId);
272
+ case 'create-team': return await this._createTeam(cfg, callerAgentId, params);
273
+ case 'update-team': return await this._updateTeam(cfg, callerAgentId, params);
274
+ case 'delete-team': return await this._deleteTeam(cfg, callerAgentId, params);
275
+ case 'add-team-member': return await this._addTeamMember(cfg, callerAgentId, params);
276
+ case 'remove-team-member': return await this._removeTeamMember(cfg, callerAgentId, params);
277
+ default:
278
+ return {
279
+ success: false,
280
+ error: `Unknown action: ${action}. Supported: ${SUPPORTED_ACTIONS.join(', ')}`,
281
+ };
282
+ }
283
+ } catch (err) {
284
+ this.logger?.error?.('[platformcontrol] action failed', { action, error: err?.message });
285
+ return { success: false, error: err?.message || 'unknown error' };
286
+ }
287
+ }
288
+
289
+ _listCapabilities(level, fullCfg) {
290
+ const agentLevel = getAgentAccessLevel(fullCfg);
291
+ const teamScope = getTeamScope(fullCfg);
292
+ const teamsDisabled = isTeamAccessDisabled(fullCfg);
293
+ return {
294
+ success: true,
295
+ action: 'list-capabilities',
296
+ capabilities: {
297
+ scheduledTasks: {
298
+ level,
299
+ canListOwn: level !== SCHEDULE_ACCESS_LEVELS.DISABLED,
300
+ canListAll: level === SCHEDULE_ACCESS_LEVELS.ALL,
301
+ canMutateOwn: level !== SCHEDULE_ACCESS_LEVELS.DISABLED,
302
+ canMutateAll: level === SCHEDULE_ACCESS_LEVELS.ALL,
303
+ notes: [
304
+ 'Flow-target schedules are not reachable from this tool.',
305
+ 'Default level is "disabled". Configure via the platformcontrol tool configurator.',
306
+ ],
307
+ },
308
+ agents: {
309
+ level: agentLevel,
310
+ maxAgentsCreated: getMaxAgentsCreated(fullCfg),
311
+ canList: agentLevel !== AGENT_ACCESS_LEVELS.DISABLED,
312
+ canCreate: agentLevel !== AGENT_ACCESS_LEVELS.DISABLED,
313
+ canMutateSelfCreated: agentLevel !== AGENT_ACCESS_LEVELS.DISABLED,
314
+ canMutateAll: agentLevel === AGENT_ACCESS_LEVELS.ALL,
315
+ notes: [
316
+ 'Hard rule: an agent cannot modify itself or any of its ancestors.',
317
+ 'When configuring another agent\'s toolConfig, child permissions are clamped to your level.',
318
+ 'maxAgentsCreated null = unlimited; counted only against agents YOU created via this tool.',
319
+ ],
320
+ },
321
+ teams: {
322
+ scope: teamScope,
323
+ disabled: teamsDisabled,
324
+ notes: [
325
+ 'Multi-select scope: you can act on teams you are a member of, teams you created, or all (each independently).',
326
+ 'Leaving a team you\'re a member of is allowed.',
327
+ ],
328
+ },
329
+ },
330
+ };
331
+ }
332
+
333
+ _listSchedules(level, callerAgentId) {
334
+ const all = this.scheduleService.listSchedules();
335
+ const accessible = filterAccessibleSchedules(level, callerAgentId, all);
336
+ return {
337
+ success: true,
338
+ action: 'list-schedules',
339
+ count: accessible.length,
340
+ schedules: accessible,
341
+ scope: level,
342
+ };
343
+ }
344
+
345
+ _getSchedule(level, callerAgentId, params) {
346
+ const id = params?.scheduleId;
347
+ if (!id) return { success: false, error: 'scheduleId is required' };
348
+ const schedule = this.scheduleService.getSchedule(id);
349
+ if (!schedule) return { success: false, error: `Schedule not found: ${id}` };
350
+ const access = checkScheduleAccess(level, callerAgentId, schedule);
351
+ if (!access.allow) {
352
+ // Surface as not-found rather than scope-denied so 'own' agents
353
+ // cannot probe for the existence of other agents' schedules by id.
354
+ return { success: false, error: `Schedule not found: ${id}` };
355
+ }
356
+ return { success: true, action: 'get-schedule', schedule };
357
+ }
358
+
359
+ /**
360
+ * Resolve `targetAgentId` from the create/self-resume params:
361
+ * - 'self' → callerAgentId
362
+ * - undefined → callerAgentId (default to self)
363
+ * - any string → the explicit id
364
+ *
365
+ * In 'own' mode we then assert the resolved id MUST equal callerAgentId.
366
+ */
367
+ _resolveTargetAgentId(level, callerAgentId, raw) {
368
+ if (raw === 'self' || raw === undefined || raw === null || raw === '') return callerAgentId;
369
+ if (typeof raw !== 'string') {
370
+ throw new Error('targetAgentId must be a string (or "self")');
371
+ }
372
+ if (level === SCHEDULE_ACCESS_LEVELS.OWN && raw !== callerAgentId) {
373
+ throw new Error(
374
+ `Out of scope: 'own' mode requires targetAgentId === this agent's id ("${callerAgentId}"). ` +
375
+ `Set the platformcontrol tool to 'all' for cross-agent scheduling.`
376
+ );
377
+ }
378
+ return raw;
379
+ }
380
+
381
+ async _createSchedule(level, callerAgentId, params) {
382
+ const targetAgentId = this._resolveTargetAgentId(level, callerAgentId, params?.targetAgentId);
383
+ const built = {
384
+ name: params?.name,
385
+ prompt: params?.prompt,
386
+ targetType: 'agent', // tool only ever creates agent-target schedules
387
+ targetId: targetAgentId,
388
+ cronExpression: params?.cronExpression,
389
+ enabled: params?.enabled !== false, // default true
390
+ description: params?.description || '',
391
+ startDate: params?.startDate || null,
392
+ endDate: params?.endDate || null,
393
+ maxRuns: params?.maxRuns ?? null,
394
+ runOnce: !!params?.runOnce,
395
+ };
396
+ const schedule = await this.scheduleService.createSchedule(built);
397
+ return { success: true, action: 'create-schedule', schedule };
398
+ }
399
+
400
+ async _updateSchedule(level, callerAgentId, params) {
401
+ const id = params?.scheduleId;
402
+ if (!id) return { success: false, error: 'scheduleId is required' };
403
+ const existing = this.scheduleService.getSchedule(id);
404
+ if (!existing) return { success: false, error: `Schedule not found: ${id}` };
405
+ const access = checkScheduleAccess(level, callerAgentId, existing);
406
+ if (!access.allow) return { success: false, error: `Schedule not found: ${id}` };
407
+
408
+ // 'own' mode cannot reassign a schedule to a different target.
409
+ if (params?.targetAgentId !== undefined && params.targetAgentId !== null) {
410
+ const desired = this._resolveTargetAgentId(level, callerAgentId, params.targetAgentId);
411
+ if (level === SCHEDULE_ACCESS_LEVELS.OWN && desired !== callerAgentId) {
412
+ return {
413
+ success: false,
414
+ error: `Out of scope: 'own' mode cannot reassign schedule "${id}" to another agent.`,
415
+ };
416
+ }
417
+ }
418
+
419
+ const updates = {};
420
+ const PASS = ['name', 'description', 'prompt', 'cronExpression', 'enabled', 'startDate', 'endDate', 'maxRuns', 'runOnce'];
421
+ for (const k of PASS) if (params[k] !== undefined) updates[k] = params[k];
422
+ if (params?.targetAgentId !== undefined && params.targetAgentId !== null) {
423
+ updates.targetId = this._resolveTargetAgentId(level, callerAgentId, params.targetAgentId);
424
+ }
425
+ const schedule = await this.scheduleService.updateSchedule(id, updates);
426
+ return { success: true, action: 'update-schedule', schedule };
427
+ }
428
+
429
+ async _deleteSchedule(level, callerAgentId, params) {
430
+ const id = params?.scheduleId;
431
+ if (!id) return { success: false, error: 'scheduleId is required' };
432
+ const existing = this.scheduleService.getSchedule(id);
433
+ if (!existing) return { success: false, error: `Schedule not found: ${id}` };
434
+ const access = checkScheduleAccess(level, callerAgentId, existing);
435
+ if (!access.allow) return { success: false, error: `Schedule not found: ${id}` };
436
+ await this.scheduleService.deleteSchedule(id);
437
+ return { success: true, action: 'delete-schedule', scheduleId: id };
438
+ }
439
+
440
+ async _toggleSchedule(level, callerAgentId, params) {
441
+ const id = params?.scheduleId;
442
+ if (!id) return { success: false, error: 'scheduleId is required' };
443
+ const existing = this.scheduleService.getSchedule(id);
444
+ if (!existing) return { success: false, error: `Schedule not found: ${id}` };
445
+ const access = checkScheduleAccess(level, callerAgentId, existing);
446
+ if (!access.allow) return { success: false, error: `Schedule not found: ${id}` };
447
+
448
+ const next = typeof params?.enabled === 'boolean' ? params.enabled : !existing.enabled;
449
+ const schedule = await this.scheduleService.updateSchedule(id, { enabled: next });
450
+ return { success: true, action: 'toggle-schedule', scheduleId: id, enabled: schedule.enabled };
451
+ }
452
+
453
+ async _triggerSchedule(level, callerAgentId, params) {
454
+ const id = params?.scheduleId;
455
+ if (!id) return { success: false, error: 'scheduleId is required' };
456
+ const existing = this.scheduleService.getSchedule(id);
457
+ if (!existing) return { success: false, error: `Schedule not found: ${id}` };
458
+ const access = checkScheduleAccess(level, callerAgentId, existing);
459
+ if (!access.allow) return { success: false, error: `Schedule not found: ${id}` };
460
+
461
+ // ScheduleService doesn't expose a public "trigger now" API yet; the
462
+ // closest is _executeSchedule which is internal. Use the private path
463
+ // when available; otherwise mark this action as not-implemented so the
464
+ // agent gets clear feedback rather than a silent stub.
465
+ if (typeof this.scheduleService._executeSchedule === 'function') {
466
+ // Fire-and-forget — execution may take a while, the agent shouldn't block.
467
+ this.scheduleService._executeSchedule(existing).catch(err => {
468
+ this.logger?.warn?.('[platformcontrol] trigger-schedule execution failed', {
469
+ scheduleId: id, error: err?.message,
470
+ });
471
+ });
472
+ return { success: true, action: 'trigger-schedule', scheduleId: id, triggered: true };
473
+ }
474
+ return {
475
+ success: false,
476
+ error: 'trigger-schedule is not supported on this version of ScheduleService.',
477
+ };
478
+ }
479
+
480
+ _listPresets() {
481
+ // Presets live in scheduleService; expose via a stable surface.
482
+ // CRON_PRESETS isn't exported, so we surface the names plus a note
483
+ // pointing to scheduleService.listSchedules's cronPreset field.
484
+ // (TODO: export presets from scheduleService and read them here.)
485
+ return {
486
+ success: true,
487
+ action: 'list-presets',
488
+ presets: [
489
+ 'every-minute', 'every-5-minutes', 'every-15-minutes', 'every-30-minutes',
490
+ 'every-hour', 'every-6-hours', 'every-12-hours',
491
+ 'daily', 'daily-morning', 'daily-evening',
492
+ 'weekdays', 'weekends', 'weekly-monday', 'monthly',
493
+ ],
494
+ note: 'Pass a preset name as cronExpression OR a raw 5-field cron string.',
495
+ };
496
+ }
497
+
498
+ async _scheduleSelfResume(level, callerAgentId, params) {
499
+ // TODO: rethink ergonomics. Currently a thin wrapper around
500
+ // create-schedule with runOnce + cron derived from a future ISO
501
+ // datetime. May become a first-class wake-at primitive after we
502
+ // see how agents actually plan around it.
503
+ if (!callerAgentId) {
504
+ return { success: false, error: 'callerAgentId is required (no context.agentId)' };
505
+ }
506
+ const { runAt, prompt, name } = params || {};
507
+ if (!prompt || typeof prompt !== 'string' || !prompt.trim()) {
508
+ return { success: false, error: 'prompt (non-empty string) is required' };
509
+ }
510
+ let cron, normalizedIso;
511
+ try {
512
+ ({ cron, normalizedIso } = isoToOneShotCron(runAt));
513
+ } catch (err) {
514
+ return { success: false, error: err.message };
515
+ }
516
+ const schedule = await this.scheduleService.createSchedule({
517
+ name: name || `Self-resume @ ${normalizedIso}`,
518
+ description: 'One-shot self-resume created via platformcontrol.schedule-self-resume',
519
+ prompt,
520
+ targetType: 'agent',
521
+ targetId: callerAgentId,
522
+ cronExpression: cron,
523
+ runOnce: true,
524
+ enabled: true,
525
+ });
526
+ return {
527
+ success: true,
528
+ action: 'schedule-self-resume',
529
+ runAt: normalizedIso,
530
+ cronExpression: cron,
531
+ schedule,
532
+ };
533
+ }
534
+
535
+ // ─── Agent + team helpers ─────────────────────────────────────────
536
+
537
+ /**
538
+ * Snapshot all agents into a Map keyed by id, used to build the
539
+ * `getAgent` lookup the ancestry walker needs. Done once per action
540
+ * so a single call doesn't hit the agent pool repeatedly.
541
+ *
542
+ * Returns a tuple { agents, getAgent, isProtectedFromCaller }.
543
+ * isProtectedFromCaller is curried with the lookup so it can be
544
+ * passed into checkAgentMutationAccess as opts.isProtectedFromCaller.
545
+ */
546
+ async _agentSnapshot(callerAgentId) {
547
+ if (!this.agentPool || typeof this.agentPool.getAllAgents !== 'function') {
548
+ return { agents: [], getAgent: () => null, isProtectedFromCaller: () => false };
549
+ }
550
+ const all = await this.agentPool.getAllAgents();
551
+ // Normalize to array (getAllAgents may return a Map).
552
+ const arr = (all instanceof Map) ? Array.from(all.values()) : Array.isArray(all) ? all : [];
553
+ const getAgent = makeAgentLookup(arr);
554
+ const protect = (callerId, targetId) => isProtectedFromCaller(callerId, targetId, getAgent);
555
+ return { agents: arr, getAgent, isProtectedFromCaller: protect };
556
+ }
557
+
558
+ /** Project an agent into the safe summary shape we expose to other agents. */
559
+ _projectAgent(a) {
560
+ if (!a) return null;
561
+ return {
562
+ id: a.id,
563
+ name: a.name,
564
+ mode: a.mode,
565
+ status: a.status,
566
+ currentModel: a.currentModel,
567
+ preferredModel: a.preferredModel || null,
568
+ capabilities: Array.isArray(a.capabilities) ? a.capabilities.slice() : [],
569
+ skills: Array.isArray(a.skills) ? a.skills.slice() : [],
570
+ createdBy: a.createdBy || null,
571
+ createdAt: a.createdAt || null,
572
+ };
573
+ }
574
+
575
+ // ─── Agent CRUD ───────────────────────────────────────────────────
576
+
577
+ async _listAgents(cfg, callerAgentId) {
578
+ const level = getAgentAccessLevel(cfg);
579
+ if (level === AGENT_ACCESS_LEVELS.DISABLED) {
580
+ return { success: false, disabled: true, error: 'Agent management is disabled for this caller.' };
581
+ }
582
+ if (!this.agentPool) return { success: false, error: 'AgentPool unavailable.' };
583
+ const { agents } = await this._agentSnapshot(callerAgentId);
584
+ // Read is unrestricted at any non-disabled level — agents need to
585
+ // enumerate to make decisions. Mutations are gated separately.
586
+ const list = agents.map(a => this._projectAgent(a));
587
+ return { success: true, action: 'list-agents', count: list.length, agents: list, scope: level };
588
+ }
589
+
590
+ async _createAgent(cfg, callerAgentId, params) {
591
+ const level = getAgentAccessLevel(cfg);
592
+ if (level === AGENT_ACCESS_LEVELS.DISABLED) {
593
+ return { success: false, disabled: true, error: 'Agent management is disabled for this caller.' };
594
+ }
595
+ if (!this.agentPool || typeof this.agentPool.createAgent !== 'function') {
596
+ return { success: false, error: 'AgentPool unavailable.' };
597
+ }
598
+ const { name, systemPrompt, model } = params || {};
599
+ if (!name || typeof name !== 'string' || !name.trim()) {
600
+ return { success: false, error: 'name (non-empty string) is required' };
601
+ }
602
+ if (!systemPrompt || typeof systemPrompt !== 'string') {
603
+ return { success: false, error: 'systemPrompt (string) is required' };
604
+ }
605
+
606
+ // Per-creator quota — count alive agents whose createdBy === caller.
607
+ const max = getMaxAgentsCreated(cfg);
608
+ if (max !== null) {
609
+ const { agents } = await this._agentSnapshot(callerAgentId);
610
+ const owned = agents.filter(a => a.createdBy === callerAgentId).length;
611
+ if (owned >= max) {
612
+ return {
613
+ success: false,
614
+ error: `Per-creator agent quota exhausted (${owned}/${max}). Delete one of your created agents or ask the user to raise maxAgentsCreated.`,
615
+ };
616
+ }
617
+ }
618
+
619
+ // Privilege clamp on the requested toolConfig.platformcontrol.
620
+ let pcSliceClamps = [];
621
+ let nextToolConfig = (params.toolConfig && typeof params.toolConfig === 'object') ? { ...params.toolConfig } : {};
622
+ if (nextToolConfig.platformcontrol && typeof nextToolConfig.platformcontrol === 'object') {
623
+ const callerPc = (cfg && typeof cfg === 'object') ? cfg : {};
624
+ const { config: clampedPc, clamps } = clampToolConfigForChild(callerPc, nextToolConfig.platformcontrol);
625
+ nextToolConfig.platformcontrol = clampedPc;
626
+ pcSliceClamps = clamps;
627
+ }
628
+
629
+ const newConfig = {
630
+ name: name.trim(),
631
+ description: typeof params.description === 'string' ? params.description : '',
632
+ systemPrompt,
633
+ model: model || undefined,
634
+ preferredModel: params.preferredModel || model || undefined,
635
+ capabilities: Array.isArray(params.capabilities) ? params.capabilities.slice() : [],
636
+ skills: Array.isArray(params.skills) ? params.skills.slice() : [],
637
+ toolConfig: nextToolConfig,
638
+ directoryAccess: params.directoryAccess || undefined,
639
+ // KEY: tag the new agent's parent so ancestry rules apply forever after.
640
+ createdBy: callerAgentId,
641
+ };
642
+
643
+ const created = await this.agentPool.createAgent(newConfig);
644
+ return {
645
+ success: true,
646
+ action: 'create-agent',
647
+ agent: this._projectAgent(created),
648
+ clamps: pcSliceClamps,
649
+ };
650
+ }
651
+
652
+ async _updateAgent(cfg, callerAgentId, params) {
653
+ const level = getAgentAccessLevel(cfg);
654
+ if (level === AGENT_ACCESS_LEVELS.DISABLED) {
655
+ return { success: false, disabled: true, error: 'Agent management is disabled for this caller.' };
656
+ }
657
+ if (!this.agentPool) return { success: false, error: 'AgentPool unavailable.' };
658
+ const targetId = params?.agentId;
659
+ if (!targetId) return { success: false, error: 'agentId is required' };
660
+
661
+ const { agents, isProtectedFromCaller: protect } = await this._agentSnapshot(callerAgentId);
662
+ const target = agents.find(a => a.id === targetId);
663
+ if (!target) return { success: false, error: `Agent not found: ${targetId}` };
664
+
665
+ const access = checkAgentMutationAccess(level, callerAgentId, target, {
666
+ isProtectedFromCaller: protect,
667
+ });
668
+ if (!access.allow) {
669
+ return { success: false, error: access.reason };
670
+ }
671
+
672
+ // Build the updates patch — everything the user UI accepts, with the
673
+ // privilege clamp applied to toolConfig.platformcontrol.
674
+ const updates = {};
675
+ const PASS_THROUGH = ['name', 'description', 'systemPrompt', 'model', 'preferredModel',
676
+ 'capabilities', 'skills', 'directoryAccess'];
677
+ for (const k of PASS_THROUGH) if (params[k] !== undefined) updates[k] = params[k];
678
+
679
+ let pcSliceClamps = [];
680
+ if (params.toolConfig && typeof params.toolConfig === 'object') {
681
+ const next = { ...params.toolConfig };
682
+ if (next.platformcontrol && typeof next.platformcontrol === 'object') {
683
+ const callerPc = (cfg && typeof cfg === 'object') ? cfg : {};
684
+ const { config: clampedPc, clamps } = clampToolConfigForChild(callerPc, next.platformcontrol);
685
+ next.platformcontrol = clampedPc;
686
+ pcSliceClamps = clamps;
687
+ }
688
+ updates.toolConfig = next;
689
+ }
690
+
691
+ const updated = await this.agentPool.updateAgent(targetId, updates);
692
+ return {
693
+ success: true,
694
+ action: 'update-agent',
695
+ agent: this._projectAgent(updated || target),
696
+ clamps: pcSliceClamps,
697
+ };
698
+ }
699
+
700
+ async _deleteAgent(cfg, callerAgentId, params) {
701
+ const level = getAgentAccessLevel(cfg);
702
+ if (level === AGENT_ACCESS_LEVELS.DISABLED) {
703
+ return { success: false, disabled: true, error: 'Agent management is disabled for this caller.' };
704
+ }
705
+ if (!this.agentPool) return { success: false, error: 'AgentPool unavailable.' };
706
+ const targetId = params?.agentId;
707
+ if (!targetId) return { success: false, error: 'agentId is required' };
708
+
709
+ const { agents, isProtectedFromCaller: protect } = await this._agentSnapshot(callerAgentId);
710
+ const target = agents.find(a => a.id === targetId);
711
+ if (!target) return { success: false, error: `Agent not found: ${targetId}` };
712
+
713
+ const access = checkAgentMutationAccess(level, callerAgentId, target, {
714
+ isProtectedFromCaller: protect,
715
+ });
716
+ if (!access.allow) return { success: false, error: access.reason };
717
+
718
+ const report = await cascadeDeleteAgent({
719
+ agentId: targetId,
720
+ scheduleService: this.scheduleService,
721
+ memoryService: this.memoryService,
722
+ stateManager: this.stateManager,
723
+ agentPool: this.agentPool,
724
+ logger: this.logger,
725
+ });
726
+ return {
727
+ success: report.agentDeleted,
728
+ action: 'delete-agent',
729
+ agentId: targetId,
730
+ report,
731
+ };
732
+ }
733
+
734
+ // ─── Team CRUD + membership ───────────────────────────────────────
735
+
736
+ async _listTeams(cfg, callerAgentId) {
737
+ if (isTeamAccessDisabled(cfg)) {
738
+ return { success: false, disabled: true, error: 'Team management is disabled for this caller.' };
739
+ }
740
+ if (!this.stateManager || typeof this.stateManager.getAllTeams !== 'function') {
741
+ return { success: false, error: 'StateManager unavailable.' };
742
+ }
743
+ const all = await this.stateManager.getAllTeams();
744
+ const scope = getTeamScope(cfg);
745
+ // Per the design: read is unrestricted within scope (not unlimited
746
+ // like agents). The agent only sees teams it's reachable for —
747
+ // listing teams it can never act on adds noise without value.
748
+ const accessible = filterAccessibleTeams(scope, callerAgentId, all);
749
+ return { success: true, action: 'list-teams', count: accessible.length, teams: accessible, scope };
750
+ }
751
+
752
+ async _createTeam(cfg, callerAgentId, params) {
753
+ if (isTeamAccessDisabled(cfg)) {
754
+ return { success: false, disabled: true, error: 'Team management is disabled for this caller.' };
755
+ }
756
+ if (!this.stateManager || typeof this.stateManager.createTeam !== 'function') {
757
+ return { success: false, error: 'StateManager unavailable.' };
758
+ }
759
+ const { name, description, color } = params || {};
760
+ if (!name || typeof name !== 'string' || !name.trim()) {
761
+ return { success: false, error: 'name (non-empty string) is required' };
762
+ }
763
+ const team = await this.stateManager.createTeam({
764
+ name: name.trim(),
765
+ description: description || '',
766
+ color,
767
+ createdBy: callerAgentId,
768
+ });
769
+ return { success: true, action: 'create-team', team };
770
+ }
771
+
772
+ /**
773
+ * Verify scope access on an EXISTING team. Returns the team or an
774
+ * error result — the caller propagates either.
775
+ */
776
+ async _resolveTeamForAccess(cfg, callerAgentId, teamId) {
777
+ if (!teamId) return { error: 'teamId is required' };
778
+ const team = await this.stateManager.getTeam(teamId);
779
+ if (!team) return { error: `Team not found: ${teamId}` };
780
+ const scope = getTeamScope(cfg);
781
+ const access = checkTeamAccess(scope, callerAgentId, team);
782
+ if (!access.allow) return { error: `Team not found: ${teamId}` }; // hide existence
783
+ return { team };
784
+ }
785
+
786
+ async _updateTeam(cfg, callerAgentId, params) {
787
+ if (isTeamAccessDisabled(cfg)) {
788
+ return { success: false, disabled: true, error: 'Team management is disabled for this caller.' };
789
+ }
790
+ const got = await this._resolveTeamForAccess(cfg, callerAgentId, params?.teamId);
791
+ if (got.error) return { success: false, error: got.error };
792
+ const updates = {};
793
+ for (const k of ['name', 'description', 'color']) {
794
+ if (params[k] !== undefined) updates[k] = params[k];
795
+ }
796
+ const updated = await this.stateManager.updateTeam(params.teamId, updates);
797
+ return { success: true, action: 'update-team', team: updated };
798
+ }
799
+
800
+ async _deleteTeam(cfg, callerAgentId, params) {
801
+ if (isTeamAccessDisabled(cfg)) {
802
+ return { success: false, disabled: true, error: 'Team management is disabled for this caller.' };
803
+ }
804
+ const got = await this._resolveTeamForAccess(cfg, callerAgentId, params?.teamId);
805
+ if (got.error) return { success: false, error: got.error };
806
+ const report = await cascadeDeleteTeam({
807
+ teamId: params.teamId,
808
+ stateManager: this.stateManager,
809
+ logger: this.logger,
810
+ });
811
+ return { success: report.teamDeleted, action: 'delete-team', teamId: params.teamId, report };
812
+ }
813
+
814
+ /**
815
+ * Adding a member is a team mutation. Self-add is allowed iff the
816
+ * caller's scope already covers the team (e.g. 'all', 'ownedByMe').
817
+ * The hard rules apply to AGENT mutations — adding agentX to a team
818
+ * is a TEAM mutation, not an agent mutation, so no ancestor check.
819
+ */
820
+ async _addTeamMember(cfg, callerAgentId, params) {
821
+ if (isTeamAccessDisabled(cfg)) {
822
+ return { success: false, disabled: true, error: 'Team management is disabled for this caller.' };
823
+ }
824
+ const got = await this._resolveTeamForAccess(cfg, callerAgentId, params?.teamId);
825
+ if (got.error) return { success: false, error: got.error };
826
+ const agentId = params?.agentId === 'self' ? callerAgentId : params?.agentId;
827
+ if (!agentId) return { success: false, error: 'agentId is required' };
828
+ const team = await this.stateManager.addAgentToTeam(params.teamId, agentId);
829
+ return { success: true, action: 'add-team-member', teamId: params.teamId, agentId, team };
830
+ }
831
+
832
+ /**
833
+ * Removing a member is a team mutation. SPECIAL CASE: if the agent
834
+ * is removing ITSELF (leaving), allow it as long as the team is
835
+ * within scope — leaving a team is not self-modification of the
836
+ * agent record, it's modification of the team's member list.
837
+ * If the agent has 'member' scope and is leaving, the team IS in
838
+ * scope by definition, so this just works.
839
+ */
840
+ async _removeTeamMember(cfg, callerAgentId, params) {
841
+ if (isTeamAccessDisabled(cfg)) {
842
+ return { success: false, disabled: true, error: 'Team management is disabled for this caller.' };
843
+ }
844
+ const got = await this._resolveTeamForAccess(cfg, callerAgentId, params?.teamId);
845
+ if (got.error) return { success: false, error: got.error };
846
+ const agentId = params?.agentId === 'self' ? callerAgentId : params?.agentId;
847
+ if (!agentId) return { success: false, error: 'agentId is required' };
848
+ const team = await this.stateManager.removeAgentFromTeam(params.teamId, agentId);
849
+ return { success: true, action: 'remove-team-member', teamId: params.teamId, agentId, team };
850
+ }
851
+ }
852
+
853
+ export default PlatformControlTool;
854
+ export { PlatformControlTool };