xonecode 0.11.0 → 0.13.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 (85) hide show
  1. package/apps/web/dist/assets/index-D8kdTP0Z.css +1 -0
  2. package/apps/web/dist/assets/index-a1EvXQj9.js +485 -0
  3. package/apps/web/dist/assets/{php-DPbDT8rX.js → php-qXN69lAY.js} +1 -1
  4. package/apps/web/dist/assets/{ruby-Bfvws9R8.js → ruby-Cxx7RgZA.js} +1 -1
  5. package/apps/web/dist/iconos/conectores/deepwiki.png +0 -0
  6. package/apps/web/dist/iconos/conectores/jira.png +0 -0
  7. package/apps/web/dist/index.html +2 -2
  8. package/dist/agent/conectores/conectoresEnDisco.js +188 -0
  9. package/dist/agent/conectores/conectoresEnDisco.js.map +1 -0
  10. package/dist/agent/conectores/proveedorDeConector.js +56 -0
  11. package/dist/agent/conectores/proveedorDeConector.js.map +1 -0
  12. package/dist/agent/conectores/servicioDeConectores.js +496 -0
  13. package/dist/agent/conectores/servicioDeConectores.js.map +1 -0
  14. package/dist/agent/config/catalogoModelos.js +2 -0
  15. package/dist/agent/config/catalogoModelos.js.map +1 -1
  16. package/dist/agent/config/modelos.js +27 -0
  17. package/dist/agent/config/modelos.js.map +1 -1
  18. package/dist/agent/config/settingsEnDisco.js +16 -0
  19. package/dist/agent/config/settingsEnDisco.js.map +1 -1
  20. package/dist/agent/dispositivos/procesosEnMaquina.js +24 -2
  21. package/dist/agent/dispositivos/procesosEnMaquina.js.map +1 -1
  22. package/dist/agent/grafo/ejecucionCancelable.js +117 -0
  23. package/dist/agent/grafo/ejecucionCancelable.js.map +1 -0
  24. package/dist/agent/grafo/incorporarAdjunto.js +262 -0
  25. package/dist/agent/grafo/incorporarAdjunto.js.map +1 -0
  26. package/dist/agent/grafo/perfiles.js +12 -5
  27. package/dist/agent/grafo/perfiles.js.map +1 -1
  28. package/dist/agent/grafo/proyecto.js +53 -18
  29. package/dist/agent/grafo/proyecto.js.map +1 -1
  30. package/dist/agent/grafo/xoneAgent.js +25 -0
  31. package/dist/agent/grafo/xoneAgent.js.map +1 -1
  32. package/dist/agent/motores/trueforge/capacidades.js +69 -4
  33. package/dist/agent/motores/trueforge/capacidades.js.map +1 -1
  34. package/dist/agent/motores/trueforge/detencion.js +138 -0
  35. package/dist/agent/motores/trueforge/detencion.js.map +1 -0
  36. package/dist/agent/motores/trueforge/modeloLangchain.js +36 -4
  37. package/dist/agent/motores/trueforge/modeloLangchain.js.map +1 -1
  38. package/dist/agent/motores/trueforge/notas.js +49 -0
  39. package/dist/agent/motores/trueforge/notas.js.map +1 -0
  40. package/dist/agent/motores/trueforge/sesionTrueforge.js +100 -3
  41. package/dist/agent/motores/trueforge/sesionTrueforge.js.map +1 -1
  42. package/dist/agent/sesiones/adjuntosDeSesion.js +235 -0
  43. package/dist/agent/sesiones/adjuntosDeSesion.js.map +1 -0
  44. package/dist/agent/subagentes/agentesEnDisco.js +4 -0
  45. package/dist/agent/subagentes/agentesEnDisco.js.map +1 -1
  46. package/dist/agent/trazaDeErroresEnDisco.js +12 -4
  47. package/dist/agent/trazaDeErroresEnDisco.js.map +1 -1
  48. package/dist/agent/turno/depuracion.js +27 -0
  49. package/dist/agent/turno/depuracion.js.map +1 -0
  50. package/dist/agent/turno/diagnosticoDeTools.js +7 -1
  51. package/dist/agent/turno/diagnosticoDeTools.js.map +1 -1
  52. package/dist/agent/turno/informeDeTraza.js +2 -1
  53. package/dist/agent/turno/informeDeTraza.js.map +1 -1
  54. package/dist/agent/turno/interrupts.js +13 -0
  55. package/dist/agent/turno/interrupts.js.map +1 -1
  56. package/dist/agent/turno/resumenDeTool.js +4 -0
  57. package/dist/agent/turno/resumenDeTool.js.map +1 -1
  58. package/dist/agent/turno/turnoReal.js +9 -2
  59. package/dist/agent/turno/turnoReal.js.map +1 -1
  60. package/dist/cli/main.js +52 -10
  61. package/dist/cli/main.js.map +1 -1
  62. package/dist/core/actos.js.map +1 -1
  63. package/dist/core/adjuntos.js +72 -14
  64. package/dist/core/adjuntos.js.map +1 -1
  65. package/dist/core/conectores.js +191 -0
  66. package/dist/core/conectores.js.map +1 -0
  67. package/dist/core/entrega.js.map +1 -1
  68. package/dist/core/modelos.js +23 -1
  69. package/dist/core/modelos.js.map +1 -1
  70. package/dist/core/settings.js +57 -0
  71. package/dist/core/settings.js.map +1 -1
  72. package/dist/web/servidor/arranque.js +336 -6
  73. package/dist/web/servidor/arranque.js.map +1 -1
  74. package/dist/web/servidor/consolaWeb.js +29 -3
  75. package/dist/web/servidor/consolaWeb.js.map +1 -1
  76. package/dist/web/servidor/servidor.js +16 -1
  77. package/dist/web/servidor/servidor.js.map +1 -1
  78. package/dist/web/servidor/transporte.js.map +1 -1
  79. package/dist/web/servidor/vestibulo.js +122 -11
  80. package/dist/web/servidor/vestibulo.js.map +1 -1
  81. package/dist/web/servidor/visorOpenui.js +25 -3
  82. package/dist/web/servidor/visorOpenui.js.map +1 -1
  83. package/package.json +1 -1
  84. package/apps/web/dist/assets/index-BAyybSz-.css +0 -1
  85. package/apps/web/dist/assets/index-BNCMVjWv.js +0 -485
@@ -1 +1 @@
1
- {"version":3,"file":"modelos.js","sourceRoot":"","sources":["../../src/core/modelos.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"modelos.js","sourceRoot":"","sources":["../../src/core/modelos.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,OAAO,GAAqB,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAU,CAAC;AAqBnF,MAAM,CAAC,MAAM,qBAAqB,GAAG,SAAS,CAAC;AAE/C;;;;;;;;GAQG;AACH,MAAM,IAAI,GAAG,2BAA2B,CAAC;AAEzC,MAAM,UAAU,uBAAuB,CAAC,IAAY;IAClD,IAAI,IAAI,KAAK,EAAE;QAAE,OAAO,6BAA6B,CAAC;IACtD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,OAAO,wHAAwH,CAAC;IAClI,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,OAAO,MAAM;SACV,SAAS,CAAC,KAAK,CAAC;SAChB,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;SAC/B,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;SACZ,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,KAAa;IACpD,OAAO,KAAK,CAAC,UAAU,CAAC,qBAAqB,CAAC;WACzC,uBAAuB,CAAC,KAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,KAAK,SAAS,CAAC;AACxF,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,SAAiC;IAC/D,OAAO,SAAS,CAAC,KAAK,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,IAAY;IACrD,OAAO,GAAG,qBAAqB,GAAG,IAAI,EAA4B,CAAC;AACrE,CAAC;AAYD;;;;;;GAMG;AACH,MAAM,QAAQ,GAAwB,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;AAE1F;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,2BAA2B,CAAC,KAAa;IACvD,IAAI,GAAQ,CAAC;IACb,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,6DAA6D,CAAC;IACvE,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,KAAK,EAAE,IAAI,GAAG,CAAC,QAAQ,KAAK,EAAE,EAAE,CAAC;QAC/C,OAAO,8EAA8E,CAAC;IACxF,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChD,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC;QAAE,OAAO,SAAS,CAAC;IAC7E,OAAO,iGAAiG,CAAC;AAC3G,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAgC;IACtD,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc;IACzD,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc;CAC1D,CAAC;AAsBX,MAAM,CAAC,MAAM,kBAAkB,GAG3B;IACF,MAAM,EAAE,EAAE,OAAO,EAAE,qCAAqC,EAAE,QAAQ,EAAE,gBAAgB,EAAE;IACtF,IAAI,EAAE,EAAE,OAAO,EAAE,gCAAgC,EAAE,QAAQ,EAAE,cAAc,EAAE;IAC7E,GAAG,EAAE,EAAE,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,aAAa,EAAE;IAChE;;;;;;;;;;OAUG;IACH,QAAQ,EAAE,EAAE,OAAO,EAAE,6BAA6B,EAAE,QAAQ,EAAE,kBAAkB,EAAE;IAClF;;;;;;;;;;OAUG;IACH,aAAa,EAAE,EAAE,OAAO,EAAE,+BAA+B,EAAE,QAAQ,EAAE,qBAAqB,EAAE;IAC5F;;;;;;OAMG;IACH,cAAc,EAAE,EAAE,OAAO,EAAE,4BAA4B,EAAE,QAAQ,EAAE,sBAAsB,EAAE;CAC5F,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAA8C;IAChF,SAAS,EAAE,mBAAmB;IAC9B,MAAM,EAAE,gBAAgB;IACxB,MAAM,EAAE,gBAAgB;IACxB,cAAc,EAAE,gBAAgB;IAChC,GAAG,MAAM,CAAC,WAAW,CACnB,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAC7F;CACF,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,GAAqC;IAChD,MAAM,EAAE,eAAe;IACvB,MAAM,EAAE,QAAQ;IAChB,SAAS,EAAE,WAAW;IACtB,MAAM,EAAE,QAAQ;IAChB,cAAc,EAAE,cAAc;IAC9B,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,KAAK;IACV,QAAQ,EAAE,UAAU;IACpB,aAAa,EAAE,aAAa;IAC5B,cAAc,EAAE,cAAc;CAC/B,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAC/B,SAAoB,EACpB,aAA4C,EAAE;IAE9C,IAAI,wBAAwB,CAAC,SAAS,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;QACxC,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,MAAM,IAAI,IAAI,CAAC;IACjE,CAAC;IACD,OAAO,OAAO,CAAC,SAAS,CAAC,CAAC;AAC5B,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CAAC,SAAoB;IACtD,IAAI,wBAAwB,CAAC,SAAS,CAAC,EAAE,CAAC;QACxC,OAAO,kBAAkB,eAAe,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;IACzF,CAAC;IACD,OAAO,uBAAuB,CAAC,SAAS,CAAC,CAAC;AAC5C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CACjC,SAAoB,EACpB,aAA4C,EAAE;IAE9C,IAAI,wBAAwB,CAAC,SAAS,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;QACxC,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAC1D,IAAI,SAAS,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QAC9C,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,QAAQ,EAAE,mBAAmB,CAAC,SAAS,CAAE,EAAE,CAAC;IACnF,CAAC;IACD,OAAQ,kBAA+F,CACrG,SAA6B,CAC9B,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,cAAc,GAA2B,IAAI,GAAG,CAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;AASrF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,WAAW,GAA4D;IAClF,MAAM,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,qBAAqB,EAAE;IAC9D,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,qBAAqB,EAAE;IAC/D,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE;CAC1D,CAAC;AAEF,MAAM,OAAO,gBAAiB,SAAQ,KAAK;CAAG;AAE9C;;;;;;;;GAQG;AACH,MAAM,UAAU,OAAO,CAAC,KAAa;IACnC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,gBAAgB,CACxB,IAAI,KAAK,sDAAsD,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACxF,CAAC;IACJ,CAAC;IACD,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IACtC,oFAAoF;IACpF,qFAAqF;IACrF,wFAAwF;IACxF,sEAAsE;IACtE,IACE,CAAE,WAAiC,CAAC,QAAQ,CAAC,SAAS,CAAC;WACpD,CAAC,wBAAwB,CAAC,SAAS,CAAC,EACvC,CAAC;QACD,MAAM,IAAI,gBAAgB,CACxB,cAAc,SAAS,+BAA+B,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;cAC1E,oEAAoE,CACzE,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,SAAsB,EAAE,MAAM,EAAE,CAAC;AACvD,CAAC;AAeD;;;;;;;;;GASG;AACH,MAAM,UAAU,QAAQ,CAAC,UAA6B,EAAE;IACtD,MAAM,MAAM,GAAG,EAA6B,CAAC;IAC7C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,mDAAmD;QACnD,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;QAC7E,CAAC;aAAM,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YAC3B,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;QACrE,CAAC;aAAM,IAAI,OAAO,CAAC,OAAO,EAAE,eAAe,EAAE,CAAC;YAC5C,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;QACrF,CAAC;aAAM,IAAI,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9C,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;QACtF,CAAC;aAAM,IAAI,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;YACpC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;QAC9E,CAAC;aAAM,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5C,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;QAClF,CAAC;aAAM,IAAI,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;YAClC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;QAC1E,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;QAC/D,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,8BAA8B,GAAsB;IACxD,iBAAiB;IACjB,iBAAiB;IACjB,iBAAiB;IACjB,mBAAmB;CACpB,CAAC;AAEF,MAAM,UAAU,sBAAsB,CAAC,SAAoB,EAAE,MAAc;IACzE,IAAI,SAAS,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC;IAC5C,OAAO,8BAA8B,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;AACtF,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,+BAA+B,GAAsB;IACzD,GAAG,8BAA8B;IACjC,eAAe;IACf,iBAAiB;IACjB,cAAc;IACd,eAAe;CAChB,CAAC;AAEF,MAAM,UAAU,wBAAwB,CAAC,SAAoB,EAAE,MAAc;IAC3E,IAAI,SAAS,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC;IAC5C,OAAO,+BAA+B,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;AACvF,CAAC"}
@@ -21,6 +21,16 @@ export const PLATAFORMAS_DE_DISPOSITIVO = ["android", "androidEmulador", "ios",
21
21
  export function seMira(ajustes, plataforma) {
22
22
  return ajustes?.[plataforma] !== false;
23
23
  }
24
+ /**
25
+ * ¿Está activa la depuración? Ausente = sí, mientras dure esta etapa de pruebas.
26
+ *
27
+ * Mismo molde que `seMira`: solo `false` apaga. Vive aquí, separado del campo crudo, para que
28
+ * quien resuelve el valor en vigor (`agent/turno/depuracion.ts#entornoConDepuracion`, y el
29
+ * cliente al pintar la casilla) no reimplemente la regla de la omisión cada vez.
30
+ */
31
+ export function depuracionActiva(depurar) {
32
+ return depurar !== false;
33
+ }
24
34
  /**
25
35
  * Tope máximo del selector de concurrencia de tareas en Ajustes. La omisión (sin nada
26
36
  * guardado) es `CONCURRENCIA_POR_OMISION` de `core/tareas.ts` — 2 — y vive ahí y no aquí
@@ -114,12 +124,14 @@ export function validarSettings(bruto) {
114
124
  const workspace = typeof objeto.workspace === "string" ? objeto.workspace : undefined;
115
125
  const dispositivos = validarDispositivos(objeto.dispositivos);
116
126
  const concurrenciaDeTareas = validarConcurrenciaDeTareas(objeto.concurrenciaDeTareas);
127
+ const depurar = typeof objeto.depurar === "boolean" ? objeto.depurar : undefined;
117
128
  return {
118
129
  settings: {
119
130
  entornos,
120
131
  ...(workspace === undefined ? {} : { workspace }),
121
132
  ...(dispositivos === undefined ? {} : { dispositivos }),
122
133
  ...(concurrenciaDeTareas === undefined ? {} : { concurrenciaDeTareas }),
134
+ ...(depurar === undefined ? {} : { depurar }),
123
135
  },
124
136
  avisos,
125
137
  };
@@ -302,6 +314,51 @@ export function entornoDeUrl(url, entornos) {
302
314
  const buscada = canonica(url);
303
315
  return entornos.find((entorno) => canonica(entorno.url) === buscada)?.id;
304
316
  }
317
+ /**
318
+ * Cuántos caracteres caben en el nombre de un entorno.
319
+ *
320
+ * Es un tope de PANTALLA, no de dato: el nombre se pinta en la pestaña de Ajustes y en la
321
+ * barra lateral, y ninguno de los dos es un párrafo. Se RECHAZA en vez de RECORTAR — un
322
+ * nombre cortado en silencio es el bug mudo de siempre, y quien lo escribió no se entera.
323
+ */
324
+ export const LARGO_NOMBRE_DE_ENTORNO = 60;
325
+ /**
326
+ * Por qué NO vale el nombre de un entorno, o `undefined` si vale.
327
+ *
328
+ * El nombre es un RÓTULO, no un identificador, y esa es toda la regla: el `id` sigue saliendo
329
+ * de la URL del servidor y sigue siendo la clave de todo —el segmento de la carpeta del
330
+ * workspace (`rutaDeWorkspace`), el hueco de sus credenciales de OAuth, el valor del
331
+ * `entorno` del `config.json` del proyecto y el valor que viaja por el cable—, así que aquí NO
332
+ * se aplica la regla de un slug. Espacios, acentos y mayúsculas valen: es la misma distinción
333
+ * que hace el `nombre` de un proveedor personalizado (`core/modelos.ts`), y por eso renombrar
334
+ * un entorno no mueve ninguna carpeta ni invalida ningún token.
335
+ *
336
+ * Un nombre VACÍO se rechaza, y no es una validación de formulario: `validarEntorno` DESCARTA
337
+ * un entorno sin nombre al cargar, así que dejarlo en blanco no deja un entorno «sin nombre» —
338
+ * lo hace DESAPARECER en el siguiente arranque, con sus credenciales y su carpeta colgando de
339
+ * un id que ya no está en ninguna lista. El motivo lo dice, porque la consecuencia no se
340
+ * adivina.
341
+ *
342
+ * Vive en `core/` porque la aplican los DOS lados: el servidor al guardar (y su negativa va en
343
+ * el 409, como la de `olvidar`) y el cliente para poder avisar sin haber ido al servidor. La
344
+ * frontera prohíbe compartir módulo, así que el cliente lleva su copia DECLARADA — la misma
345
+ * regla que `motivoDeWorkspaceInaceptable`.
346
+ *
347
+ * **Y NO se comprueba que no se repita**, que es una decisión y no un olvido: el nombre no es
348
+ * la clave, así que dos entornos que se llaman igual —el mismo servidor visto por dos redes, un
349
+ * clon de pruebas— se distinguen perfectamente por su `id`, y negarse obligaría a inventarse
350
+ * sufijos para algo que no está roto. Lo que sí hace falta es que la pantalla lo ADVIERTA, para
351
+ * que nadie acabe con dos pestañas idénticas creyendo que son cosas distintas.
352
+ */
353
+ export function motivoDeNombreDeEntornoInaceptable(nombre) {
354
+ const limpio = nombre.trim();
355
+ if (limpio === "")
356
+ return "escribe un nombre: uno sin nombre desaparece de la lista al volver a arrancar";
357
+ if (limpio.length > LARGO_NOMBRE_DE_ENTORNO) {
358
+ return `no puede pasar de ${LARGO_NOMBRE_DE_ENTORNO} caracteres, que es lo que cabe en su pestaña`;
359
+ }
360
+ return undefined;
361
+ }
305
362
  /**
306
363
  * Por qué NO se puede quitar un entorno ahora mismo, o `undefined` si se puede.
307
364
  *
@@ -1 +1 @@
1
- {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/core/settings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/core/settings.ts"],"names":[],"mappings":"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"}
@@ -65,8 +65,8 @@ import { borrarCredencial, guardarCredencial } from "../../agent/config/authEnDi
65
65
  import { borrarProveedorPersonalizado, guardarProveedorPersonalizado, proveedoresPersonalizados, } from "../../agent/config/configEnDisco.js";
66
66
  import { crearCheckpointerDeProyecto, mantenimientoDelCheckpointer, } from "../../agent/sesiones/checkpointer.js";
67
67
  import { resumenDePoda } from "../../core/podaDeCheckpoint.js";
68
- import { cargarSettings, guardarConcurrenciaDeTareas, guardarWorkspace as guardarWorkspaceEnDisco, guardarDispositivos, guardarEntorno as guardarEntornoEnDisco, olvidarEntornoDeSettings, copiasDeEntorno, borrarCopiasDeEntorno, } from "../../agent/config/settingsEnDisco.js";
69
- import { dentroDelWorkspace, expandirConCasa, motivoParaNoOlvidarEntorno, motivoDeWorkspaceInaceptable, } from "../../core/settings.js";
68
+ import { cargarSettings, guardarConcurrenciaDeTareas, guardarDepurar, guardarWorkspace as guardarWorkspaceEnDisco, guardarDispositivos, guardarEntorno as guardarEntornoEnDisco, olvidarEntornoDeSettings, copiasDeEntorno, borrarCopiasDeEntorno, } from "../../agent/config/settingsEnDisco.js";
69
+ import { dentroDelWorkspace, depuracionActiva, expandirConCasa, motivoParaNoOlvidarEntorno, motivoDeNombreDeEntornoInaceptable, motivoDeWorkspaceInaceptable, } from "../../core/settings.js";
70
70
  import { esModoDeEscritura, MODO_POR_OMISION, } from "../../core/modoDeEscritura.js";
71
71
  import { mudarWorkspaceLegado } from "../../agent/config/mudanzaEnDisco.js";
72
72
  import { elegirCarpetaEnMaquina, haySelectorDeCarpeta } from "../../agent/config/selectorEnMaquina.js";
@@ -83,7 +83,7 @@ import { ficherosDelProyecto } from "../../agent/turno/ficherosDelProyecto.js";
83
83
  import { fotoDeColecciones } from "../../core/fotoDeColecciones.js";
84
84
  import { modeloDelCambio } from "../../agent/sesiones/modeloDelCambio.js";
85
85
  import { planesDelProyecto } from "../../agent/planesEnDisco.js";
86
- import { CSP_DE_OPENUI, documentoDeOpenui, esArtefactoOpenui } from "./visorOpenui.js";
86
+ import { CSP_DE_OPENUI, documentoDeOpenui, esArtefactoOpenui, temaDeVisor } from "./visorOpenui.js";
87
87
  import { RUTA_IMAGEN_DEL_PROYECTO } from "../../core/imagenesDeDocumento.js";
88
88
  import { leerArtefactoCrudo, leerArtefactoDeSesion, } from "../../agent/grafo/artefactosEnDisco.js";
89
89
  import { CatalogoModelos, baseUrlDeOllama, baseUrlDeOllamaCloud, capacidadesDeOllama, } from "../../agent/config/catalogoModelos.js";
@@ -96,6 +96,7 @@ import { consolaParaTarea, crearCorredorDeTareas, revisionConGit, } from "./corr
96
96
  import { CONCURRENCIA_POR_OMISION, conEstado, darPorBuenaAMano, tituloDeTarea, } from "../../core/tareas.js";
97
97
  import { aplicarFeedback, TOPE_DE_ADJUNTO } from "../../agent/tareas/tareasEnDisco.js";
98
98
  import { nombreDeAdjuntoAceptable } from "../../core/adjuntos.js";
99
+ import { guardarAdjuntoDeSesion, TOPE_DE_ADJUNTO_DE_SESION } from "../../agent/sesiones/adjuntosDeSesion.js";
99
100
  import { rutaMemoriaDeProyecto } from "../../agent/grafo/memoriaDeProyecto.js";
100
101
  import { crearAumentador, invocarParaAumentar } from "../../agent/tareas/aumentador.js";
101
102
  import { baseDeWorkspaceLegada, baseDeWorkspacePorOmision, conexionDeVestibulo, crearVestibulo, escribirProyectoEnDisco, esProyectoEnDisco, } from "./vestibulo.js";
@@ -106,6 +107,8 @@ import { baseDeWorkspaceLegada, baseDeWorkspacePorOmision, conexionDeVestibulo,
106
107
  // doblan.
107
108
  import { filaDeTarea } from "./transporte.js";
108
109
  import { esEsfuerzo, nivelesDeEsfuerzo } from "../../core/esfuerzo.js";
110
+ import { definicionDelCable, RUTA_CALLBACK_MCP } from "../../core/conectores.js";
111
+ import { servicioDeConectoresCableado } from "../../agent/conectores/servicioDeConectores.js";
109
112
  /** Las dos rutas del cable. El cliente las tiene escritas en `apps/web/src/conexion.ts`. */
110
113
  /**
111
114
  * Cuánto se espera al aviso de «lo que ya había sin commitear» antes de anunciar sin él.
@@ -197,6 +200,14 @@ function tipoServido(mime) {
197
200
  ? `${mime}; charset=utf-8`
198
201
  : mime;
199
202
  }
203
+ /**
204
+ * Las cinco entidades de HTML, para la página del callback OAuth de un conector. El
205
+ * `mensaje` que escapa es siempre una frase NUESTRA (`ServicioDeConectores.completar`), pero
206
+ * se escapa igual: defensa en profundidad, no confianza en el origen.
207
+ */
208
+ function escaparHtml(texto) {
209
+ return texto.replace(/[&<>"']/g, (c) => ({ "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;", "'": "&#39;" })[c]);
210
+ }
200
211
  /**
201
212
  * Monta `/eventos` y `/accion` sobre un servidor ya levantado.
202
213
  *
@@ -966,6 +977,12 @@ export function montarRutas(servidor, vestibulo, opciones = {}) {
966
977
  // El workspace, por lo mismo que los subagentes y las skills: Ajustes se puede abrir en
967
978
  // cuanto conecta, y un campo en blanco se lee como «no hay ninguno puesto».
968
979
  const workspace = mensajeDeWorkspace();
980
+ // La casilla «Depurar», por lo mismo que el workspace: Ajustes se puede abrir en cuanto
981
+ // conecta.
982
+ const depuracion = mensajeDeDepuracion();
983
+ // Y los conectores MCP, tras el workspace y por la misma regla: solo si esta ejecución
984
+ // los monta, y entonces la ventana de Ajustes no se abre con la sección en blanco.
985
+ const conectores = mensajeDeConectores();
969
986
  /**
970
987
  * Lo consumido por la sesión que se va a pintar. Va en la ráfaga por lo mismo que los
971
988
  * modelos: una pestaña que conecta a mitad de sesión no vio los cambios anteriores, y
@@ -985,6 +1002,10 @@ export function montarRutas(servidor, vestibulo, opciones = {}) {
985
1002
  cliente(tareas);
986
1003
  if (workspace !== undefined)
987
1004
  cliente(workspace);
1005
+ if (depuracion !== undefined)
1006
+ cliente(depuracion);
1007
+ if (conectores !== undefined)
1008
+ cliente(conectores);
988
1009
  if (consumoDeLaSesion !== undefined) {
989
1010
  cliente({
990
1011
  clase: "consumo",
@@ -1001,7 +1022,7 @@ export function montarRutas(servidor, vestibulo, opciones = {}) {
1001
1022
  // Y si hay turno corriendo, se dice: quien conecta a mitad no vio el mensaje que lo
1002
1023
  // anunció, y sin esto vería el compositor encendido y sin borde —«no pasa nada»—
1003
1024
  // mientras lo que escribiera se quedaba en la cola.
1004
- cliente({ clase: "turno", activo: turnoEnVuelo() });
1025
+ cliente({ clase: "turno", activo: turnoEnVuelo(), ...(vestibulo.proyectoAbierto()?.turnoDetenible === true ? { detenible: true } : {}) });
1005
1026
  /**
1006
1027
  * Y la aprobación que esta consola tenga EN VUELO. Hace falta desde que volver a una
1007
1028
  * sesión de segundo plano es posible: su turno pudo pararse en un modal mientras
@@ -1129,6 +1150,8 @@ export function montarRutas(servidor, vestibulo, opciones = {}) {
1129
1150
  });
1130
1151
  /** Los cuatro nombres conocidos y nada más: lo que llega por el cable no elige binario. */
1131
1152
  const esNombreDeHerramienta = (v) => v === "adb" || v === "emulator" || v === "xcrun" || v === "devicectl";
1153
+ /** Las seis acciones conocidas sobre UN conector, y nada más: lo demás es un 400. */
1154
+ const esAccionDeConector = (v) => v === "anadir" || v === "quitar" || v === "probar" || v === "autorizar" || v === "desconectar" || v === "crear";
1132
1155
  const mensajeDeWorkspace = () => {
1133
1156
  const ruta = opciones.workspace?.();
1134
1157
  if (ruta === undefined)
@@ -1144,6 +1167,85 @@ export function montarRutas(servidor, vestibulo, opciones = {}) {
1144
1167
  if (m !== undefined)
1145
1168
  emitir(m);
1146
1169
  };
1170
+ const mensajeDeDepuracion = () => {
1171
+ const activa = opciones.depuracionActiva?.();
1172
+ return activa === undefined ? undefined : { clase: "depuracion", activa };
1173
+ };
1174
+ const emitirDepuracion = () => {
1175
+ const m = mensajeDeDepuracion();
1176
+ if (m !== undefined)
1177
+ emitir(m);
1178
+ };
1179
+ /**
1180
+ * El servicio de conectores, construido UNA VEZ al montar — no en cada mensaje, porque es
1181
+ * quien guarda en memoria las pruebas y las autorizaciones pendientes (`servicioDeConectores.ts`).
1182
+ * `alCambiar` es lo que hace que un cambio que ocurre en segundo plano (autorizar, probar)
1183
+ * llegue por el cable sin que nadie lo pida — la misma costura que `emitirCambioDeTareas`.
1184
+ * Ausente la OPCIÓN = esta ejecución no monta conectores.
1185
+ */
1186
+ const servicioConectores = opciones.conectores?.(() => emitirConectores());
1187
+ const mensajeDeConectores = () => {
1188
+ if (servicioConectores === undefined)
1189
+ return undefined;
1190
+ // El catálogo lo compone el SERVICIO y no se arma aquí: es `catálogo ∪ definiciones`, y una
1191
+ // segunda composición en este fichero solo traería las filas de código — dejando sin nombre
1192
+ // en pantalla a todo conector escrito a mano.
1193
+ const { catalogo, conectores, desconocidos, ilegible, error } = servicioConectores.lista();
1194
+ return {
1195
+ clase: "conectores",
1196
+ catalogo,
1197
+ conectores,
1198
+ desconocidos,
1199
+ ...(ilegible ? { ilegible } : {}),
1200
+ ...(error === undefined ? {} : { error }),
1201
+ };
1202
+ };
1203
+ const emitirConectores = () => {
1204
+ const m = mensajeDeConectores();
1205
+ if (m !== undefined)
1206
+ emitir(m);
1207
+ };
1208
+ /**
1209
+ * Autoriza un conector POR DONDE ÉL PIDA: OAuth abre el navegador del sistema y `api-key` pide
1210
+ * una clave por la consola. `ninguna` no se autoriza —por eso no llega a hacer nada— y un id
1211
+ * que no resuelve tampoco.
1212
+ *
1213
+ * Es UNA función porque la usan DOS sitios —el «Conectar» de la fila y el encadenado de
1214
+ * `crear`—: dos copias serían dos sitios donde el carril puede divergir del que dice la fila, y
1215
+ * el carril lo contesta el SERVIDOR (`autenticacionDe`), nunca el cliente, que manda la
1216
+ * intención («autoriza este id») y no por dónde. Así un conector escrito a mano con `api-key`
1217
+ * no puede acabar abriendo un navegador por una pestaña que se equivocó: `autorizar` lo
1218
+ * rechazaría, y esto ni lo intenta.
1219
+ */
1220
+ const autorizarConector = async (id) => {
1221
+ if (servicioConectores === undefined)
1222
+ return;
1223
+ const autenticacion = servicioConectores.autenticacionDe(id);
1224
+ if (autenticacion === "oauth") {
1225
+ // El puerto REAL: con `--puerto 0` el sistema elige uno, y es el mismo que ya usa
1226
+ // `servidor.url` para la ráfaga inicial — nunca uno construido a mano.
1227
+ await servicioConectores.autorizar(id, `http://127.0.0.1:${servidor.puerto}${RUTA_CALLBACK_MCP}`);
1228
+ return;
1229
+ }
1230
+ if (autenticacion !== "api-key")
1231
+ return;
1232
+ // La MISMA resolución de consola que `pedirCredencial`: la del proyecto si hay uno abierto y
1233
+ // la del vestíbulo si no. La clave vuelve por `{clase: "secreto"}`, el único mensaje del
1234
+ // cable que la lleva.
1235
+ const consola = vestibulo.proyectoAbierto()?.consola.consola ?? vestibulo.consola.consola;
1236
+ // La pregunta DICE que no hace falta el prefijo, y no es un adorno: la criba
1237
+ // (`motivoDeClaveInaceptable`) rechaza cualquier valor con espacios —o sea justo el
1238
+ // «Bearer abc» que suele ser lo que uno copia del servidor— y el `Bearer` lo pone
1239
+ // `credencialDe` al componer la cabecera. Sin decirlo, el rechazo llega sin explicación.
1240
+ const clave = (await consola.leerSecreto(`clave de ${id} (sin el «Bearer»): `)).trim();
1241
+ // Cadena vacía es la consola sin nadie al otro lado y también el Enter a secas: en los dos
1242
+ // casos no se guarda nada y no se dice nada más — quien canceló no necesita un sermón.
1243
+ if (clave === "")
1244
+ return;
1245
+ // Una clave que no pasa la criba deja su motivo en `error`, que ya viaja por el cable: aquí
1246
+ // no hay nada que informar por consola, que es donde `pedirCredencial` sí lo hace.
1247
+ servicioConectores.guardarClave(id, clave);
1248
+ };
1147
1249
  const mensajeDeTareas = () => {
1148
1250
  if (opciones.colaDeTareas === undefined)
1149
1251
  return undefined;
@@ -3438,7 +3540,9 @@ export function montarRutas(servidor, vestibulo, opciones = {}) {
3438
3540
  responder(503, "el visor de OpenUI no está construido: ejecuta «npm run build:web»");
3439
3541
  return;
3440
3542
  }
3441
- const documento = Buffer.from(documentoDeOpenui(leido.datos.toString("utf8"), visor, leido.nombre), "utf8");
3543
+ // El tema de la CONSOLA (`&tema=`, solo de la lista): el iframe no lo ve por su cuenta.
3544
+ const tema = temaDeVisor(query.get("tema"));
3545
+ const documento = Buffer.from(documentoDeOpenui(leido.datos.toString("utf8"), visor, leido.nombre, tema), "utf8");
3442
3546
  respuesta.writeHead(200, {
3443
3547
  "Content-Type": "text/html; charset=utf-8",
3444
3548
  "Content-Length": documento.length,
@@ -3525,6 +3629,45 @@ export function montarRutas(servidor, vestibulo, opciones = {}) {
3525
3629
  });
3526
3630
  respuesta.end(datos);
3527
3631
  });
3632
+ /**
3633
+ * `GET RUTA_CALLBACK_MCP` — a donde vuelve el navegador tras autorizar un conector.
3634
+ *
3635
+ * **Ruta PÚBLICA**, registrada con `registrarRutaPublica`: la cookie de sesión es
3636
+ * `SameSite=Strict`, así que la redirección que manda el proveedor OAuth llega SIN ella —
3637
+ * `Host` y `Origin` siguen delante, y la autenticación real es el `state` de un solo uso
3638
+ * que `completar` consume (`core/conectores.ts#interpretarCallback`).
3639
+ *
3640
+ * Solo se registra si esta ejecución monta conectores (`servicioConectores` viene de la
3641
+ * opción `conectores`): sin servicio no hay callback que atender.
3642
+ *
3643
+ * La página es MÍNIMA y NUESTRA — nunca repite la query cruda, que la escribe quien
3644
+ * redirige — y va con `Content-Security-Policy: default-src 'none'; style-src
3645
+ * 'unsafe-inline'` (sin red, sin script) y `Cache-Control: no-store` (no es un documento
3646
+ * que se pueda volver a servir de caché: el `state` ya se consumió).
3647
+ */
3648
+ if (servicioConectores !== undefined) {
3649
+ servidor.registrarRutaPublica("GET", RUTA_CALLBACK_MCP, async (peticion, respuesta) => {
3650
+ const query = new URLSearchParams((peticion.url ?? "").split("?")[1] ?? "");
3651
+ // `completar` no debería lanzar —sus propios fallos vuelven como `{ok:false}`—, pero
3652
+ // esto es una ruta PÚBLICA sin cookie por delante: un reventón aquí no puede dejar al
3653
+ // navegador con una petición colgada ni con un 500 sin nada que decir. Y tampoco puede
3654
+ // desaparecer en silencio: `contar` es el mismo hueco por el que se avisa de cualquier
3655
+ // otro fallo suelto de este cable (`probar`/`autorizar`, más abajo).
3656
+ const { mensaje } = await servicioConectores.completar(query).catch((error) => {
3657
+ contar(error);
3658
+ return { ok: false, mensaje: "no se pudo completar la autorización: vuelve a pulsar Conectar" };
3659
+ });
3660
+ const cuerpo = `<!doctype html><html lang="es"><head><meta charset="utf-8">` +
3661
+ `<title>xonecode</title></head><body><p>${escaparHtml(mensaje)}</p>` +
3662
+ `<p>Ya puedes cerrar esta pestaña.</p></body></html>`;
3663
+ respuesta.writeHead(200, {
3664
+ "Content-Type": "text/html; charset=utf-8",
3665
+ "Content-Security-Policy": "default-src 'none'; style-src 'unsafe-inline'",
3666
+ "Cache-Control": "no-store",
3667
+ });
3668
+ respuesta.end(cuerpo);
3669
+ });
3670
+ }
3528
3671
  /**
3529
3672
  * `POST /adjunto?tarea=<id>&nombre=<fichero>` — los BYTES de un adjunto de tarea.
3530
3673
  *
@@ -3609,8 +3752,48 @@ export function montarRutas(servidor, vestibulo, opciones = {}) {
3609
3752
  respuesta.end(texto);
3610
3753
  };
3611
3754
  const query = new URLSearchParams((peticion.url ?? "").split("?")[1] ?? "");
3612
- const tarea = query.get("tarea");
3613
3755
  const nombre = query.get("nombre");
3756
+ // IXCODE-7: `?para=sesion` es el CHAT de la sesión abierta, no una tarea — el resto de
3757
+ // la ruta (`?tarea=…`) sigue intacto debajo, sin tocar.
3758
+ if (query.get("para") === "sesion") {
3759
+ if (nombre === null || nombre === "") {
3760
+ responder(400, "falta «nombre»");
3761
+ return;
3762
+ }
3763
+ if (!nombreDeAdjuntoAceptable(nombre)) {
3764
+ responder(403, "ese nombre no vale para un adjunto");
3765
+ return;
3766
+ }
3767
+ const abierto = vestibulo.proyectoAbierto();
3768
+ if (abierto === undefined) {
3769
+ responder(409, "no hay ninguna sesión abierta");
3770
+ return;
3771
+ }
3772
+ let datos;
3773
+ try {
3774
+ datos = await leerCuerpoCrudo(peticion, TOPE_DE_ADJUNTO_DE_SESION);
3775
+ }
3776
+ catch {
3777
+ responder(413, "el adjunto es demasiado grande");
3778
+ return;
3779
+ }
3780
+ // El id con que se montó `/adjuntos/` en el disco de ESTA conversación
3781
+ // (`idDeHilo`), no `sesion` — que puede ser `undefined` en una sesión recién abierta.
3782
+ const guardado = guardarAdjuntoDeSesion(abierto.raiz, abierto.idDeHilo, nombre, datos);
3783
+ if (!guardado.ok) {
3784
+ responder(413, guardado.motivo ?? "no se pudo guardar el adjunto");
3785
+ return;
3786
+ }
3787
+ // 200 con JSON y no 204 (Ronda de arreglo 2/5, IXCODE-7): el nombre final lo decide
3788
+ // `guardarAdjuntoDeSesion` —puede llevar sufijo `-2` si ya había un adjunto igual de
3789
+ // OTRO turno de la misma sesión—, y el cliente necesita saberlo para mandarlo luego
3790
+ // con `{clase:"prosa", adjuntos}`. El camino `?tarea=` sigue en 204: ahí el nombre no
3791
+ // cambia, la carpeta es NUEVA por tarea.
3792
+ respuesta.writeHead(200, { "Content-Type": "application/json; charset=utf-8" });
3793
+ respuesta.end(JSON.stringify({ nombre: guardado.nombre }));
3794
+ return;
3795
+ }
3796
+ const tarea = query.get("tarea");
3614
3797
  if (tarea === null || tarea === "" || nombre === null || nombre === "") {
3615
3798
  responder(400, "faltan «tarea» o «nombre»");
3616
3799
  return;
@@ -3733,6 +3916,31 @@ export function montarRutas(servidor, vestibulo, opciones = {}) {
3733
3916
  respuesta.end();
3734
3917
  return;
3735
3918
  }
3919
+ if (typeof mensaje === "object" &&
3920
+ mensaje !== null &&
3921
+ mensaje.clase === "entorno" &&
3922
+ mensaje.accion === "renombrar") {
3923
+ // Como `olvidar`: la negativa se decide AQUÍ y antes del 204, para que el motivo pueda
3924
+ // ir en la respuesta — `informar` no llega al navegador desde el vestíbulo. Y el tipo
3925
+ // se mira antes de la regla porque la regla es de cadenas: un `nombre` que no sea texto
3926
+ // la haría reventar dentro del manejador, que es la única forma de que esta guarda no
3927
+ // conteste nada.
3928
+ const motivo = typeof mensaje.nombre === "string"
3929
+ ? motivoDeNombreDeEntornoInaceptable(mensaje.nombre)
3930
+ : "el nombre tiene que ser texto";
3931
+ if (motivo !== undefined) {
3932
+ respuesta.writeHead(409, { "content-type": "application/json" });
3933
+ respuesta.end(JSON.stringify({ motivo }));
3934
+ return;
3935
+ }
3936
+ void vestibulo
3937
+ .renombrarEntorno(mensaje.entorno, mensaje.nombre)
3938
+ .catch(contar)
3939
+ .finally(() => void anunciarAlta().catch(contar));
3940
+ respuesta.writeHead(204);
3941
+ respuesta.end();
3942
+ return;
3943
+ }
3736
3944
  if (typeof mensaje === "object" && mensaje !== null && mensaje.clase === "revision") {
3737
3945
  void atenderRevision(mensaje.ruta).catch(contar);
3738
3946
  respuesta.writeHead(204);
@@ -3894,6 +4102,13 @@ export function montarRutas(servidor, vestibulo, opciones = {}) {
3894
4102
  respuesta.end();
3895
4103
  return;
3896
4104
  }
4105
+ if (typeof mensaje === "object" && mensaje !== null && mensaje.clase === "depuracion" && typeof mensaje.activa === "boolean") {
4106
+ opciones.guardarDepuracion?.(mensaje.activa);
4107
+ emitirDepuracion();
4108
+ respuesta.writeHead(204);
4109
+ respuesta.end();
4110
+ return;
4111
+ }
3897
4112
  if (typeof mensaje === "object" && mensaje !== null && mensaje.clase === "elegirCarpeta") {
3898
4113
  /**
3899
4114
  * El diálogo lo abre el SISTEMA donde corre la consola, así que esto tarda lo que
@@ -3912,6 +4127,84 @@ export function montarRutas(servidor, vestibulo, opciones = {}) {
3912
4127
  respuesta.end();
3913
4128
  return;
3914
4129
  }
4130
+ if (typeof mensaje === "object" && mensaje !== null && mensaje.clase === "conector") {
4131
+ // Sin `as`: `mensaje.clase === "conector"` ya narrows a la forma de `MensajeDelCliente`
4132
+ // —la misma unión discriminada que `workspace` usa un renglón más arriba—, así que
4133
+ // `mensaje.accion` se lee directo. El `typeof` que sigue no es para el tipo (ese ya lo
4134
+ // sabe TypeScript): es la guarda de verdad contra un JSON malformado, que puede mentir
4135
+ // sobre lo que el tipo promete.
4136
+ if (servicioConectores === undefined ||
4137
+ typeof mensaje.accion !== "string" ||
4138
+ !esAccionDeConector(mensaje.accion)) {
4139
+ respuesta.writeHead(400);
4140
+ respuesta.end();
4141
+ return;
4142
+ }
4143
+ /**
4144
+ * `crear` va ANTES y se lleva su propia guarda: es la única acción que NO trae `id` —lo
4145
+ * DERIVA el servidor del nombre, que es lo que impide que el cliente elija el nombre de un
4146
+ * fichero— y la única cuyo cuerpo hay que comprobar por FORMA antes de mirarlo de verdad.
4147
+ */
4148
+ if (mensaje.accion === "crear") {
4149
+ const def = definicionDelCable(mensaje.definicion);
4150
+ // Un cuerpo sin la forma no es una definición inaceptable —esa se RECHAZA con su motivo,
4151
+ // y el motivo viaja en `error`—: es un mensaje malformado, y por eso es 400 y no 204.
4152
+ if (def === undefined) {
4153
+ respuesta.writeHead(400);
4154
+ respuesta.end();
4155
+ return;
4156
+ }
4157
+ // El servicio valida lo que tiene que valer (nombre, URL, slug libre) y su motivo sale en
4158
+ // `error`, que ya viaja.
4159
+ const id = servicioConectores.crear(def);
4160
+ // El encadenado es del SERVIDOR y va DESPUÉS de la escritura: pedir una clave —o abrir el
4161
+ // navegador— por un conector que no llegó a estar añadido no llevaría a ninguna parte. Y
4162
+ // sin `await`: esta respuesta sale en el acto y el resultado llega por `alCambiar`, igual
4163
+ // que en `probar` — con `await`, este POST se quedaría colgado hasta que alguien teclee.
4164
+ if (id !== undefined && def.autenticacion !== "ninguna")
4165
+ void autorizarConector(id).catch(contar);
4166
+ respuesta.writeHead(204);
4167
+ respuesta.end();
4168
+ return;
4169
+ }
4170
+ // Las otras CINCO sí traen id, y ahí el `typeof` es la guarda contra el JSON que miente.
4171
+ if (typeof mensaje.id !== "string") {
4172
+ respuesta.writeHead(400);
4173
+ respuesta.end();
4174
+ return;
4175
+ }
4176
+ const { id, accion } = mensaje;
4177
+ /**
4178
+ * Las cinco contestan 204 EN EL ACTO. `anadir`/`quitar`/`desconectar` son síncronas —su
4179
+ * `cambio()` ya reemite `conectores` antes de que esta función devuelva—; `probar` y
4180
+ * `autorizar` corren en segundo plano (red, o esperar al navegador que abre el sistema)
4181
+ * con `.catch(contar)`, la misma disciplina que `conexion` y `dispositivos`. El
4182
+ * resultado de las cinco llega por `emitir(mensajeDeConectores())` vía `alCambiar`,
4183
+ * nunca en esta respuesta.
4184
+ */
4185
+ switch (accion) {
4186
+ case "anadir":
4187
+ servicioConectores.anadir(id);
4188
+ break;
4189
+ case "quitar":
4190
+ servicioConectores.quitar(id);
4191
+ break;
4192
+ case "desconectar":
4193
+ servicioConectores.desconectar(id);
4194
+ break;
4195
+ case "probar":
4196
+ void servicioConectores.probar(id).catch(contar);
4197
+ break;
4198
+ case "autorizar":
4199
+ // Por dónde se autoriza lo decide el SERVIDOR —OAuth abre el navegador, `api-key` pide
4200
+ // la clave—, así que este `case` no sabe ni de carriles ni de puertos.
4201
+ void autorizarConector(id).catch(contar);
4202
+ break;
4203
+ }
4204
+ respuesta.writeHead(204);
4205
+ respuesta.end();
4206
+ return;
4207
+ }
3915
4208
  if (typeof mensaje === "object" && mensaje !== null && mensaje.clase === "modelosDeMotor" && typeof mensaje.motor === "string") {
3916
4209
  void atenderModelosDeMotor(mensaje.motor).catch(contar);
3917
4210
  respuesta.writeHead(204);
@@ -4542,6 +4835,37 @@ export function ajusteDeWorkspaceCableado(opciones) {
4542
4835
  },
4543
4836
  };
4544
4837
  }
4838
+ /**
4839
+ * Las dos mitades de la casilla «Depurar», cableadas — extraídas por el MISMO motivo que
4840
+ * `ajusteDeWorkspaceCableado`. `leer`/`guardar` entran por parámetro, y no como en el workspace
4841
+ * porque una prueba no puede leer NI escribir el `settings.json` real de quien corre la suite
4842
+ * (compartido por todo el worker vía `casaDePruebas.ts`): a diferencia del workspace, aquí no
4843
+ * hay ninguna regla que aplicar sobre el valor (un booleano no se puede rechazar), así que la
4844
+ * única razón de existir es esta — la MISMA costura de siempre, sin la mitad de validación.
4845
+ */
4846
+ export function ajusteDeDepuracionCableado(opciones = {}) {
4847
+ const leer = opciones.leer ?? (() => cargarSettings().settings.depurar);
4848
+ const guardar = opciones.guardar ?? ((activa) => void guardarDepurar(undefined, activa));
4849
+ return {
4850
+ depuracionActiva: () => depuracionActiva(leer()),
4851
+ guardarDepuracion: (activa) => guardar(activa),
4852
+ };
4853
+ }
4854
+ /**
4855
+ * La opción `conectores` de `montarRutas`, cableada — extraída por el MISMO motivo que
4856
+ * `ajusteDeWorkspaceCableado`: un literal inline dentro de `arrancarConsolaWeb` no quedaría
4857
+ * probado, y esa composición concreta —que la fábrica de verdad (`servicioDeConectoresCableado`)
4858
+ * llega montada, y con la CASA correcta— es exactamente el patrón de fallo que este repo ya
4859
+ * tiene documentado nueve veces.
4860
+ *
4861
+ * Es una función de una línea, pero la línea es la que puede caerse: sin este sitio propio,
4862
+ * `arrancarConsolaWeb` seguiría compilando y pasando sus tests aunque alguien borrara la
4863
+ * opción del objeto que le pasa a `montarRutas` — el mismo campo OPCIONAL que hace que
4864
+ * `ConsolaDeProyecto.consumo` fuera la novena vez.
4865
+ */
4866
+ export function ajusteDeConectoresCableado(opciones) {
4867
+ return { conectores: (alCambiar) => servicioDeConectoresCableado({ casa: opciones.casa, alCambiar }) };
4868
+ }
4545
4869
  export function construirCorredorDeTareasCableado(opciones) {
4546
4870
  const disco = opciones.tareasFabrica === undefined ? undefined : opciones.tareasFabrica(opciones.informar);
4547
4871
  /**
@@ -4856,6 +5180,12 @@ export async function arrancarConsolaWeb(opciones) {
4856
5180
  // (`ajusteDeWorkspaceCableado`) por el patrón de fallo de siempre — y aquí el escritor
4857
5181
  // ya venía con la marca puesta: existía con su test y sin un solo llamador.
4858
5182
  ...ajusteDeWorkspaceCableado({ casa: homedir() }),
5183
+ // La casilla «Depurar», con la MISMA disciplina: composición extraída y probada
5184
+ // (`ajusteDeDepuracionCableado`).
5185
+ ...ajusteDeDepuracionCableado(),
5186
+ // Los conectores MCP, con la MISMA disciplina: la composición extraída y probada
5187
+ // (`ajusteDeConectoresCableado`), nunca un literal aquí dentro.
5188
+ ...ajusteDeConectoresCableado({ casa: homedir() }),
4859
5189
  // El selector nativo, solo si este sistema tiene uno. En el que no, la opción no se
4860
5190
  // monta y el botón no llega a existir.
4861
5191
  ...(haySelectorDeCarpeta()