xonecode 0.12.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 (67) 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-DOl4aWua.js → php-qXN69lAY.js} +1 -1
  4. package/apps/web/dist/assets/{ruby-DFYuLGa1.js → ruby-Cxx7RgZA.js} +1 -1
  5. package/apps/web/dist/index.html +2 -2
  6. package/dist/agent/config/settingsEnDisco.js +16 -0
  7. package/dist/agent/config/settingsEnDisco.js.map +1 -1
  8. package/dist/agent/dispositivos/procesosEnMaquina.js +24 -2
  9. package/dist/agent/dispositivos/procesosEnMaquina.js.map +1 -1
  10. package/dist/agent/grafo/ejecucionCancelable.js +117 -0
  11. package/dist/agent/grafo/ejecucionCancelable.js.map +1 -0
  12. package/dist/agent/grafo/incorporarAdjunto.js +262 -0
  13. package/dist/agent/grafo/incorporarAdjunto.js.map +1 -0
  14. package/dist/agent/grafo/perfiles.js +12 -5
  15. package/dist/agent/grafo/perfiles.js.map +1 -1
  16. package/dist/agent/grafo/proyecto.js +53 -18
  17. package/dist/agent/grafo/proyecto.js.map +1 -1
  18. package/dist/agent/grafo/xoneAgent.js +25 -0
  19. package/dist/agent/grafo/xoneAgent.js.map +1 -1
  20. package/dist/agent/motores/trueforge/capacidades.js +69 -4
  21. package/dist/agent/motores/trueforge/capacidades.js.map +1 -1
  22. package/dist/agent/motores/trueforge/detencion.js +138 -0
  23. package/dist/agent/motores/trueforge/detencion.js.map +1 -0
  24. package/dist/agent/motores/trueforge/modeloLangchain.js +36 -4
  25. package/dist/agent/motores/trueforge/modeloLangchain.js.map +1 -1
  26. package/dist/agent/motores/trueforge/notas.js +49 -0
  27. package/dist/agent/motores/trueforge/notas.js.map +1 -0
  28. package/dist/agent/motores/trueforge/sesionTrueforge.js +100 -3
  29. package/dist/agent/motores/trueforge/sesionTrueforge.js.map +1 -1
  30. package/dist/agent/sesiones/adjuntosDeSesion.js +235 -0
  31. package/dist/agent/sesiones/adjuntosDeSesion.js.map +1 -0
  32. package/dist/agent/subagentes/agentesEnDisco.js +4 -0
  33. package/dist/agent/subagentes/agentesEnDisco.js.map +1 -1
  34. package/dist/agent/trazaDeErroresEnDisco.js +12 -4
  35. package/dist/agent/trazaDeErroresEnDisco.js.map +1 -1
  36. package/dist/agent/turno/depuracion.js +27 -0
  37. package/dist/agent/turno/depuracion.js.map +1 -0
  38. package/dist/agent/turno/diagnosticoDeTools.js +7 -1
  39. package/dist/agent/turno/diagnosticoDeTools.js.map +1 -1
  40. package/dist/agent/turno/informeDeTraza.js +2 -1
  41. package/dist/agent/turno/informeDeTraza.js.map +1 -1
  42. package/dist/agent/turno/interrupts.js +13 -0
  43. package/dist/agent/turno/interrupts.js.map +1 -1
  44. package/dist/agent/turno/resumenDeTool.js +4 -0
  45. package/dist/agent/turno/resumenDeTool.js.map +1 -1
  46. package/dist/agent/turno/turnoReal.js +9 -2
  47. package/dist/agent/turno/turnoReal.js.map +1 -1
  48. package/dist/cli/main.js +52 -10
  49. package/dist/cli/main.js.map +1 -1
  50. package/dist/core/actos.js.map +1 -1
  51. package/dist/core/adjuntos.js +72 -14
  52. package/dist/core/adjuntos.js.map +1 -1
  53. package/dist/core/entrega.js.map +1 -1
  54. package/dist/core/settings.js +12 -0
  55. package/dist/core/settings.js.map +1 -1
  56. package/dist/web/servidor/arranque.js +89 -6
  57. package/dist/web/servidor/arranque.js.map +1 -1
  58. package/dist/web/servidor/consolaWeb.js +29 -3
  59. package/dist/web/servidor/consolaWeb.js.map +1 -1
  60. package/dist/web/servidor/transporte.js.map +1 -1
  61. package/dist/web/servidor/vestibulo.js +77 -4
  62. package/dist/web/servidor/vestibulo.js.map +1 -1
  63. package/dist/web/servidor/visorOpenui.js +25 -3
  64. package/dist/web/servidor/visorOpenui.js.map +1 -1
  65. package/package.json +1 -1
  66. package/apps/web/dist/assets/index-BCO9A9PF.js +0 -485
  67. package/apps/web/dist/assets/index-CBbdNsze.css +0 -1
@@ -7,8 +7,8 @@
7
7
  <!-- El icono oficial, servido por Vite desde `iconos/`. Es el mismo fichero que la
8
8
  marca de la barra superior: dos copias del logo acaban siendo dos logos. -->
9
9
  <link rel="icon" type="image/png" href="./iconos/xonecode.png" />
10
- <script type="module" crossorigin src="./assets/index-BCO9A9PF.js"></script>
11
- <link rel="stylesheet" crossorigin href="./assets/index-CBbdNsze.css">
10
+ <script type="module" crossorigin src="./assets/index-a1EvXQj9.js"></script>
11
+ <link rel="stylesheet" crossorigin href="./assets/index-D8kdTP0Z.css">
12
12
  </head>
13
13
  <!-- Sin el atributo aquí: el oscuro es SOLO del splash (el registro de entorno y
14
14
  modelo), no de la consola entera — `App.tsx` lo pone y lo quita él mismo, en el
@@ -153,6 +153,22 @@ export function guardarConcurrenciaDeTareas(casa, concurrencia) {
153
153
  escribirAtomico(ruta, JSON.stringify(fusionado, null, 2) + "\n");
154
154
  return { ruta };
155
155
  }
156
+ /**
157
+ * Guarda el interruptor de depuración, sin tocar nada más del fichero.
158
+ *
159
+ * `true` BORRA la clave en vez de escribirla: ausente y encendida significan lo mismo
160
+ * mientras dure esta etapa de pruebas (`core/settings.ts#Settings.depurar`), y guardar un
161
+ * `true` explícito solo ensuciaría el fichero de quien nunca tocó nada.
162
+ */
163
+ export function guardarDepurar(casa, depurar) {
164
+ const ruta = rutaSettings(casa ?? homedir());
165
+ const crudo = leerCrudoOAbortar(ruta);
166
+ const fusionado = depurar
167
+ ? Object.fromEntries(Object.entries(crudo).filter(([k]) => k !== "depurar"))
168
+ : { ...crudo, depurar: false };
169
+ escribirAtomico(ruta, JSON.stringify(fusionado, null, 2) + "\n");
170
+ return { ruta };
171
+ }
156
172
  /** Guarda solo la base del workspace, sin tocar la lista de entornos. */
157
173
  export function guardarWorkspace(casa, base) {
158
174
  const ruta = rutaSettings(casa ?? homedir());
@@ -1 +1 @@
1
- {"version":3,"file":"settingsEnDisco.js","sourceRoot":"","sources":["../../../src/agent/config/settingsEnDisco.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"settingsEnDisco.js","sourceRoot":"","sources":["../../../src/agent/config/settingsEnDisco.ts"],"names":[],"mappings":"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"}
@@ -19,7 +19,7 @@
19
19
  * `matarGrupo` son puertos, y sus valores POR OMISIÓN —los únicos de verdad, y los mismos para
20
20
  * los dos módulos— son los que nadie pasa cuando esto corre sobre una máquina.
21
21
  */
22
- import { spawn } from "node:child_process";
22
+ import { execFileSync, spawn } from "node:child_process";
23
23
  /**
24
24
  * Cuánto se aguanta SIN una sola línea de salida antes de darlo por colgado.
25
25
  *
@@ -32,10 +32,32 @@ import { spawn } from "node:child_process";
32
32
  export const TOPE_SIN_SALIDA_MS = 5 * 60_000;
33
33
  /** Y un tope total, para que un proceso que habla sin avanzar no se quede para siempre. */
34
34
  export const TOPE_DE_TRABAJO_MS = 60 * 60_000;
35
+ /**
36
+ * Mata un árbol de procesos por PID, en las DOS plataformas. Es la ÚNICA función que decide
37
+ * CUÁNDO y CÓMO se mata un árbol — la comparte `agent/grafo/ejecucionCancelable.ts`.
38
+ *
39
+ * En Windows no hay grupos de proceso POSIX ni `SIGTERM`/`SIGKILL` de verdad: `taskkill /T`
40
+ * recorre el árbol real por PID (no depende de `detached`) y `/F` es el único modo forzoso
41
+ * que hay — no existe un equivalente "amable".
42
+ *
43
+ * `plataforma`/`taskkill` inyectables por lo de siempre: un test en macOS/Linux no puede
44
+ * ejecutar `taskkill` de verdad, pero sí puede comprobar que se construye la invocación
45
+ * correcta.
46
+ */
47
+ export function matarGrupoReal(pid, senal, opciones = {}) {
48
+ const plataforma = opciones.plataforma ?? process.platform;
49
+ if (plataforma === "win32") {
50
+ const taskkill = opciones.taskkill ??
51
+ ((args) => void execFileSync("taskkill", args, { stdio: "ignore", windowsHide: true }));
52
+ taskkill(["/PID", String(pid), "/T", "/F"]);
53
+ return;
54
+ }
55
+ process.kill(-pid, senal);
56
+ }
35
57
  /** Un ejecutor con los efectos que le pasen. Sin nada, los de verdad. */
36
58
  export function crearEjecutor(deps = {}) {
37
59
  const lanzar = deps.lanzar ?? lanzarReal;
38
- const matarGrupo = deps.matarGrupo ?? ((pid, senal) => void process.kill(-pid, senal));
60
+ const matarGrupo = deps.matarGrupo ?? ((pid, senal) => matarGrupoReal(pid, senal));
39
61
  const entorno = deps.entorno ?? process.env;
40
62
  let cancelado = false;
41
63
  /** El que esté VIVO ahora. Se limpia al cerrarse: matar a un muerto no arregla nada. */
@@ -1 +1 @@
1
- {"version":3,"file":"procesosEnMaquina.js","sourceRoot":"","sources":["../../../src/agent/dispositivos/procesosEnMaquina.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,GAAG,MAAM,CAAC;AAE7C,2FAA2F;AAC3F,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,GAAG,MAAM,CAAC;AA8E9C,yEAAyE;AACzE,MAAM,UAAU,aAAa,CAAC,OAA+B,EAAE;IAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,UAAU,CAAC;IACzC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,GAAW,EAAE,KAAa,EAAE,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,KAAuB,CAAC,CAAC,CAAC;IACzH,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC;IAE5C,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,wFAAwF;IACxF,IAAI,WAAqC,CAAC;IAE1C;;;;;;OAMG;IACH,MAAM,MAAM,GAAG,CACb,OAAe,EACf,IAAc,EACd,WAAmC,EAAE,EACd,EAAE;QACzB,wFAAwF;QACxF,uFAAuF;QACvF,IAAI,SAAS;YAAE,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;QAE/D,MAAM,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC;QAC3C,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,IAAI,OAAO,CAAC;QACpC,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC;QAEvC,OAAO,IAAI,OAAO,CAAe,CAAC,QAAQ,EAAE,EAAE;YAC5C,IAAI,IAAiB,CAAC;YACtB,IAAI,CAAC;gBACH,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;YACxC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,QAAQ,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACvD,OAAO;YACT,CAAC;YAED;;;;;eAKG;YACH,MAAM,UAAU,GAAG,CAAC,KAAa,EAAQ,EAAE;gBACzC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;gBACrB,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;oBACtB,IAAI,CAAC;wBACH,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;wBACvB,OAAO;oBACT,CAAC;oBAAC,MAAM,CAAC;wBACP,oEAAoE;oBACtE,CAAC;gBACH,CAAC;gBACD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnB,CAAC,CAAC;YAEF,IAAI,OAAoC,CAAC;YACzC,IAAI,SAAoD,CAAC;YACzD,MAAM,OAAO,GAAG,GAAS,EAAE;gBACzB,YAAY,CAAC,SAAS,CAAC,CAAC;gBACxB,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;oBAC1B,OAAO,GAAG,UAAU,CAAC;oBACrB,UAAU,CAAC,SAAS,CAAC,CAAC;gBACxB,CAAC,EAAE,kBAAkB,CAAC,CAAC;YACzB,CAAC,CAAC;YACF,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,OAAO,GAAG,OAAO,CAAC;gBAClB,UAAU,CAAC,SAAS,CAAC,CAAC;YACxB,CAAC,EAAE,kBAAkB,CAAC,CAAC;YACvB,OAAO,EAAE,CAAC;YAEV,WAAW,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YAC1C,IAAI,SAAS;gBAAE,WAAW,EAAE,CAAC;YAE7B,qFAAqF;YACrF,mEAAmE;YACnE,IAAI,KAAK,GAAG,EAAE,CAAC;YACf,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,CAAC,IAAa,EAAQ,EAAE;gBACtC,OAAO,EAAE,CAAC;gBACV,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;gBACtB,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBACpC,KAAK,GAAG,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;gBAC3B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBAC3B,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;oBAC/B,IAAI,MAAM,KAAK,EAAE;wBAAE,SAAS;oBAC5B,MAAM,GAAG,MAAM,CAAC;oBAChB,YAAY,EAAE,CAAC,MAAM,CAAC,CAAC;gBACzB,CAAC;YACH,CAAC,CAAC;YACF,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAChC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAEhC,wFAAwF;YACxF,uFAAuF;YACvF,oDAAoD;YACpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5D,KAAK,MAAM,CAAC,IAAI,OAAO;oBAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC/C,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;YAEjB,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,KAAY,EAAE,EAAE;gBACjC,YAAY,CAAC,SAAS,CAAC,CAAC;gBACxB,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,WAAW,GAAG,SAAS,CAAC;gBACxB,QAAQ,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACzD,CAAC,CAAU,CAAC,CAAC;YACb,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,MAAqB,EAAE,EAAE;gBAC1C,YAAY,CAAC,SAAS,CAAC,CAAC;gBACxB,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,WAAW,GAAG,SAAS,CAAC;gBACxB,kFAAkF;gBAClF,4DAA4D;gBAC5D,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;oBAC1B,QAAQ,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;oBACzC,OAAO;gBACT,CAAC;gBACD,IAAI,SAAS,EAAE,CAAC;oBACd,QAAQ,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;oBAClC,OAAO;gBACT,CAAC;gBACD,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;oBACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;oBAC3B,OAAO;gBACT,CAAC;gBACD,QAAQ,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;YACzE,CAAC,CAAU,CAAC,CAAC;QACf,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,OAAO;QACL,MAAM;QACN,QAAQ,EAAE,GAAG,EAAE;YACb,SAAS,GAAG,IAAI,CAAC;YACjB,WAAW,EAAE,EAAE,CAAC;QAClB,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,MAAM,CAAC,GAAG,KAAqD,CAAC;IAChE,IAAI,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,yBAAyB,CAAC;IACjG,MAAM,OAAO,GAAG,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACjH,OAAO,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAClD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,MAAqB,EAAE,MAAc;IACnE,OAAO,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,sBAAsB,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;AACjE,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAAC,OAAe,EAAE,aAAqB,OAAO,CAAC,QAAQ;IAClF,OAAO,UAAU,KAAK,OAAO,IAAI,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACjE,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,UAAU,GAAW,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAC5D,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE;IACnB,GAAG,EAAE,QAAQ,CAAC,GAAG;IACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;IAC/B,QAAQ,EAAE,IAAI;IACd,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;CACnD,CAA2B,CAAC"}
1
+ {"version":3,"file":"procesosEnMaquina.js","sourceRoot":"","sources":["../../../src/agent/dispositivos/procesosEnMaquina.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,117 @@
1
+ /**
2
+ * El `execute` de deepagents, reescrito. La librería (`LocalShellBackend.execute`) mata solo
3
+ * al hijo INMEDIATO al vencer su timeout (un nieto sobrevive) y no acepta ninguna señal de
4
+ * cancelación — ver el porqué medido en
5
+ * `docs/superpowers/specs/2026-09-25-cancelacion-de-execute-design.md`.
6
+ *
7
+ * Sustituye a `LocalShellBackend.execute` ENTERO: mismo formato de salida, más `detached` (en
8
+ * POSIX) + `matarGrupoReal` (mata el ÁRBOL, en las dos plataformas) y una `AbortSignal`
9
+ * opcional.
10
+ *
11
+ * Dos exit codes que la librería no distinguía: **124** si venció el timeout (igual que
12
+ * ella), **130** si lo canceló la señal (128+SIGINT, convención de shell para
13
+ * "interrumpido") — el modelo puede distinguir "me quedé sin tiempo" de "me cancelaron".
14
+ */
15
+ import { spawn } from "node:child_process";
16
+ import { matarGrupoReal } from "../dispositivos/procesosEnMaquina.js";
17
+ /**
18
+ * **`detached: true` no es cosmético: es la causa raíz.** Sin él, el hijo comparte el grupo
19
+ * de proceso de xonecode entero, y `process.kill(-pid)` (dentro de `matarGrupoReal`) mataría
20
+ * ESE grupo — el propio xonecode incluido. `LocalShellBackend.execute` de la librería no lo
21
+ * pone, y por eso su `child.kill()` solo alcanza al hijo inmediato.
22
+ *
23
+ * **`detached` es solo de POSIX.** Es lo que hace al hijo líder de su propio grupo para que
24
+ * `process.kill(-pid)` alcance al árbol; en Windows no hay grupos de proceso POSIX, así que
25
+ * `matarGrupoReal` usa `taskkill /T` (recorre el árbol por PID, no por grupo) y no lo
26
+ * necesita — y ahí `detached: true` le abre al hijo su PROPIA ventana de consola visible (lo
27
+ * dice la documentación de Node). `windowsHide: true` va siempre, en las dos plataformas: en
28
+ * POSIX no hace nada, en Windows evita esa ventana.
29
+ */
30
+ export const lanzarReal = (comando, opciones) => spawn(comando, {
31
+ shell: true,
32
+ env: opciones.env,
33
+ cwd: opciones.cwd,
34
+ detached: process.platform !== "win32",
35
+ windowsHide: true,
36
+ });
37
+ const TOPE_DE_SALIDA_BYTES = 100_000;
38
+ export function crearExecuteCancelable(opciones, deps = {}) {
39
+ const lanzar = deps.lanzar ?? lanzarReal;
40
+ const matarGrupo = deps.matarGrupo ?? ((pid, senal) => matarGrupoReal(pid, senal));
41
+ const maxOutputBytes = opciones.maxOutputBytes ?? TOPE_DE_SALIDA_BYTES;
42
+ return (comando, senal) => {
43
+ if (!comando || typeof comando !== "string") {
44
+ return Promise.resolve({ output: "Error: Command must be a non-empty string.", exitCode: 1, truncated: false });
45
+ }
46
+ if (senal?.aborted) {
47
+ return Promise.resolve({ output: "Error: Command cancelled.", exitCode: 130, truncated: false });
48
+ }
49
+ return new Promise((resolver) => {
50
+ const hijo = lanzar(comando, { env: opciones.env, cwd: opciones.cwd });
51
+ let stdout = "";
52
+ let stderr = "";
53
+ let causa;
54
+ const matar = (senalOS) => {
55
+ const pid = hijo.pid;
56
+ if (pid !== undefined) {
57
+ try {
58
+ matarGrupo(pid, senalOS);
59
+ return;
60
+ }
61
+ catch {
62
+ // El grupo ya no está o el sistema no deja: se intenta con el hijo.
63
+ }
64
+ }
65
+ hijo.kill(senalOS);
66
+ };
67
+ const timer = setTimeout(() => {
68
+ causa = "timeout";
69
+ matar("SIGKILL");
70
+ }, opciones.timeoutS * 1000);
71
+ const alAbortar = () => {
72
+ causa = "cancelado";
73
+ matar("SIGKILL");
74
+ };
75
+ senal?.addEventListener("abort", alAbortar, { once: true });
76
+ hijo.stdout.on("data", (dato) => void (stdout += String(dato)));
77
+ hijo.stderr.on("data", (dato) => void (stderr += String(dato)));
78
+ hijo.on("error", ((error) => {
79
+ clearTimeout(timer);
80
+ senal?.removeEventListener("abort", alAbortar);
81
+ resolver({ output: `Error executing command: ${error.message}`, exitCode: 1, truncated: false });
82
+ }));
83
+ hijo.on("close", ((codigo) => {
84
+ clearTimeout(timer);
85
+ senal?.removeEventListener("abort", alAbortar);
86
+ if (causa === "cancelado") {
87
+ resolver({ output: "Error: Command cancelled.", exitCode: 130, truncated: false });
88
+ return;
89
+ }
90
+ if (causa === "timeout") {
91
+ resolver({
92
+ output: `Error: Command timed out after ${opciones.timeoutS.toFixed(1)} seconds.`,
93
+ exitCode: 124,
94
+ truncated: false,
95
+ });
96
+ return;
97
+ }
98
+ const partes = [];
99
+ if (stdout)
100
+ partes.push(stdout);
101
+ if (stderr)
102
+ partes.push(...stderr.trim().split("\n").map((l) => `[stderr] ${l}`));
103
+ let salida = partes.length > 0 ? partes.join("\n") : "<no output>";
104
+ let truncado = false;
105
+ if (salida.length > maxOutputBytes) {
106
+ salida = `${salida.slice(0, maxOutputBytes)}\n\n... Output truncated at ${maxOutputBytes} bytes.`;
107
+ truncado = true;
108
+ }
109
+ const exitCode = codigo ?? 1;
110
+ if (exitCode !== 0)
111
+ salida = `${salida.trimEnd()}\n\nExit code: ${exitCode}`;
112
+ resolver({ output: salida, exitCode, truncated: truncado });
113
+ }));
114
+ });
115
+ };
116
+ }
117
+ //# sourceMappingURL=ejecucionCancelable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ejecucionCancelable.js","sourceRoot":"","sources":["../../../src/agent/grafo/ejecucionCancelable.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,262 @@
1
+ import { existsSync, lstatSync, mkdirSync, readFileSync, realpathSync, statSync, writeFileSync } from "node:fs";
2
+ import { basename, dirname, relative, resolve, sep } from "node:path";
3
+ import { tool } from "@langchain/core/tools";
4
+ import { z } from "zod";
5
+ import { artefactoFueraDeSitio, esRutaDeArtefacto, RUTA_ARTEFACTOS } from "../../core/artefactos.js";
6
+ import { NOMBRE_INCORPORAR_ADJUNTO, nombreDeAdjuntoAceptable, RUTA_ADJUNTOS } from "../../core/adjuntos.js";
7
+ import { esRutaDePlan, RUTA_PLANES } from "../../core/planes.js";
8
+ import { RUTA_HOTSWAP } from "../../core/hotswap.js";
9
+ import { RUTA_HISTORIAL_DE_MENSAJES, RUTA_RESULTADOS_GRANDES } from "../../core/descargas.js";
10
+ import { RUTA_MEMORIA_VIRTUAL } from "../../core/memoria.js";
11
+ import { dentroDeCarpeta, puedeEscribirRuta } from "./perfiles.js";
12
+ import { esVistaAplanada, porQueNo } from "./proyecto.js";
13
+ export { NOMBRE_INCORPORAR_ADJUNTO };
14
+ /**
15
+ * Meter un ADJUNTO del chat en el PROYECTO (IXCODE-7): «pon este icono en el menú».
16
+ *
17
+ * ## Por qué es una tool y no un `read_file` + `write_file`
18
+ *
19
+ * Las tools de fichero son de TEXTO (`write(filePath, content: string)`), y un PNG no
20
+ * sobrevive a esa ida y vuelta: lleva ceros en su cabecera y se copiaría corrupto sin que nadie
21
+ * se enterara hasta abrir la app. Es el mismo reparto que `copiar_artefacto`: el harness copia
22
+ * los BYTES porque el agente no puede, y darle una shell para eso sería peor que el problema.
23
+ *
24
+ * ## Por qué pasa por la APROBACIÓN, y `copiar_artefacto` no
25
+ *
26
+ * `copiar_artefacto` es del documentador, confinado por `escribeEn` a `/doc/`. Ésta es de quien
27
+ * escribe el proyecto ENTERO, así que el destino puede ser cualquier fichero de la app —también
28
+ * uno que ya existe, que se REEMPLAZA—. Eso es exactamente lo que `write_file` no hace sin que
29
+ * alguien lo apruebe, y una tool que lo hiciera sería la puerta trasera de la aprobación. Por
30
+ * eso va en el HITL por su NOMBRE, en los dos motores (`perfiles.ts#hitlDe`, las capacidades de
31
+ * TrueForge), y por eso el destino se llama `file_path`: es la clave que leen `seDetieneEn`, la
32
+ * tarjeta (`interrupts.ts#ficheroDe`) y el modo autónomo al anotar la ruta.
33
+ *
34
+ * ## Las guardas, reaplicadas A MANO
35
+ *
36
+ * Una tool propia no pasa por el middleware de permisos ni por la pila del backend: escribe al
37
+ * disco directo. Así que lo que ahí es gratis aquí hay que decirlo:
38
+ *
39
+ * 1. **El ORIGEN es un adjunto de verdad**: un nombre de la lista BLANCA de forma
40
+ * (`nombreDeAdjuntoAceptable`), no un `startsWith` — sin eso sería `/adjuntos/../.env`.
41
+ * 2. **El DESTINO lo puede escribir ESTE agente** (`puedeEscribirRuta`), y no es un sitio de
42
+ * artefacto equivocado (`artefactoFueraDeSitio`).
43
+ * 3. **El destino es el PROYECTO**: ni `/artefactos/`, ni `/planes/`, ni `/adjuntos/`, ni
44
+ * `/skills/`, ni los otros montajes del backend (`/hotswap/`, las descargas de deepagents,
45
+ * `/MEMORIA_PROYECTO.md`). Detrás de esas rutas el backend tiene OTRA carpeta; esta tool
46
+ * escribiría en la del proyecto un fichero con ese nombre. Y es además lo que sostiene a
47
+ * `seDetieneEn`: por `/artefactos/` y `/planes/` NO se pregunta, así que la única barrera ahí
48
+ * es este rechazo (`incorporarAdjunto.test.ts` lo ata ruta a ruta).
49
+ * 4. **Ni una vista APLANADA** (`X.xml` con su `X.xne`): la regla es del proyecto, no del
50
+ * backend por el que esta tool no pasa.
51
+ * 5. **Y todo, dos veces: por TEXTO y por `realpath`**, como `copiar_artefacto` y las escrituras
52
+ * de los motores externos. En APFS `.XONECODE` abre `.xonecode`, y un enlace dentro de la raíz
53
+ * puede apuntar fuera. **A diferencia de `copiar_artefacto`, la contención se comprueba ANTES
54
+ * de crear carpetas**: sobre el primer ancestro que existe, para que un destino que sale del
55
+ * proyecto no deje un árbol vacío fuera. El fichero final, si existe, no puede ser un enlace:
56
+ * escribir lo seguiría.
57
+ *
58
+ * Todo rechazo se DEVUELVE como texto, nunca se lanza (un `throw` se lleva el turno), y de un
59
+ * error de Node solo viaja su `code`: su mensaje lleva la ruta de la máquina.
60
+ */
61
+ /**
62
+ * Quién la recibe: escribe el PROYECTO y no está confinado por `escribeEn`. Regla de DATO, no una
63
+ * lista de nombres: de los de serie da `designer-xone` y `developer-xone`, que es lo que se
64
+ * decidió. Quien ejecuta no: la shell ya se le quitó el `write_file` para que tocar el proyecto
65
+ * siga siendo el camino del diff. Y quien va acotado por `escribeEn` (el documentador) tiene
66
+ * `copiar_artefacto` para lo suyo.
67
+ *
68
+ * **Solo llega a `motor: "modelo"`**, sin que esta función lo mire: los de motor externo se montan
69
+ * aparte y no reciben tools propias (corren en otro proceso), y tampoco ven `/adjuntos/`: es una
70
+ * ruta virtual de nuestro backend. El inventario que lee el orquestador lo dice
71
+ * (`core/adjuntos.ts#conAdjuntos`).
72
+ */
73
+ export function recibeIncorporarAdjunto(a) {
74
+ return !a.soloLectura && a.ejecucion !== true && (a.escribeEn ?? []).length === 0;
75
+ }
76
+ const Entrada = z.object({
77
+ adjunto: z
78
+ .string()
79
+ .describe("El adjunto, por su ruta /adjuntos/<nombre> (la que dice el mensaje) o su nombre a secas"),
80
+ file_path: z
81
+ .string()
82
+ .describe("Dónde va en el PROYECTO, ruta virtual con su nombre de fichero (p. ej. /icons/ic_add.png). Pide aprobación."),
83
+ });
84
+ /** Los montajes del backend: detrás de estas rutas NO está el proyecto. */
85
+ const MONTAJES = [
86
+ RUTA_ARTEFACTOS,
87
+ RUTA_PLANES,
88
+ RUTA_ADJUNTOS,
89
+ "/skills/",
90
+ RUTA_HOTSWAP,
91
+ RUTA_RESULTADOS_GRANDES,
92
+ RUTA_HISTORIAL_DE_MENSAJES,
93
+ ];
94
+ /**
95
+ * ¿Por qué no vale `ruta` como destino, mirando SOLO el texto? `undefined` = vale.
96
+ *
97
+ * Se aplica dos veces: a lo que escribió el modelo y a la ruta que sale del `realpath`.
98
+ * Todo se compara también sin mayúsculas (APFS: `/Adjuntos/` es la misma carpeta en disco).
99
+ */
100
+ function motivoDeDestino(perfil, ruta) {
101
+ // Y en MINÚSCULAS: `puedeEscribirRuta` distingue mayúsculas y APFS no, así que `/.ENV` pasaba el
102
+ // texto y, sin `.env` en disco, tampoco lo paraba el `realpath` (no hay nombre que corregir):
103
+ // el `.ENV` que se creaba ES el `.env`. Medido: `/.ENV`, `/.Env.local` y `/.GIT/config` contestaban
104
+ // «Incorporado» sobre una raíz sin ellos. Negar de más en un sistema que sí distingue es barato.
105
+ if (!puedeEscribirRuta(perfil, ruta) || !puedeEscribirRuta(perfil, ruta.toLowerCase())) {
106
+ return `No puedes escribir en «${ruta}».`;
107
+ }
108
+ if (artefactoFueraDeSitio(ruta) !== undefined) {
109
+ return `«${ruta}» no vale como destino: esa carpeta es la de los artefactos, no la del proyecto.`;
110
+ }
111
+ const minusculas = ruta.toLowerCase();
112
+ if (esRutaDeArtefacto(ruta)
113
+ || esRutaDePlan(ruta)
114
+ || minusculas === RUTA_MEMORIA_VIRTUAL.toLowerCase()
115
+ || MONTAJES.some((m) => dentroDeCarpeta(minusculas, m.replace(/\/$/, "")))) {
116
+ return `«${ruta}» no es una ruta del proyecto. Un adjunto se incorpora a una carpeta de la app, como /icons/.`;
117
+ }
118
+ return undefined;
119
+ }
120
+ /** `ic.png` y `/adjuntos/ic.png` son lo mismo: se admite lo que el modelo escriba. */
121
+ function nombreDelAdjunto(entrada) {
122
+ const limpia = entrada.trim();
123
+ return limpia.startsWith(RUTA_ADJUNTOS) ? limpia.slice(RUTA_ADJUNTOS.length) : limpia.replace(/^\/+/, "");
124
+ }
125
+ /** ¿Está `real` dentro de `base` (los dos ya reales)? Por SEGMENTO: `/a/bc` no pasa por `/a/b`. */
126
+ function dentroDe(real, base) {
127
+ return real === base || real.startsWith(base.endsWith(sep) ? base : `${base}${sep}`);
128
+ }
129
+ /** La ruta VIRTUAL de un camino real que ya se sabe dentro de la raíz real. */
130
+ function comoVirtual(real, raizReal) {
131
+ const rel = relative(raizReal, real);
132
+ return rel === "" ? "/" : `/${rel.split(sep).join("/")}`;
133
+ }
134
+ /** De un error de Node, solo su `code`: el mensaje lleva la ruta absoluta. */
135
+ function codigoDe(error) {
136
+ const code = error?.code;
137
+ return typeof code === "string" ? code : error instanceof Error ? error.name : "error";
138
+ }
139
+ /** ¿Existe `ruta` como entrada del directorio, sin seguir un enlace? */
140
+ function existeSinSeguir(ruta) {
141
+ try {
142
+ lstatSync(ruta);
143
+ return true;
144
+ }
145
+ catch {
146
+ return false;
147
+ }
148
+ }
149
+ /**
150
+ * ¿Es `virtual` una vista APLANADA en el disco de `raiz`? `esVistaAplanada` pide el inventario
151
+ * del proyecto; aquí basta con preguntarle al disco por la ÚNICA fuente que la haría aplanada,
152
+ * su `.xne` al lado.
153
+ */
154
+ function aplanadaEnDisco(raiz, virtual) {
155
+ const fuente = `${virtual.slice(0, -4)}.xne`;
156
+ return esVistaAplanada(virtual, new Set(existsSync(resolve(raiz, fuente.slice(1))) ? [fuente] : []));
157
+ }
158
+ export function crearIncorporarAdjunto(donde) {
159
+ return tool(async ({ adjunto, file_path }) => {
160
+ // (1) El origen, por su FORMA.
161
+ const nombre = nombreDelAdjunto(adjunto);
162
+ if (!nombreDeAdjuntoAceptable(nombre)) {
163
+ return `«${adjunto}» no es un adjunto de esta conversación. Solo se incorpora lo que está en ${RUTA_ADJUNTOS}.`;
164
+ }
165
+ const origenVirtual = `${RUTA_ADJUNTOS}${nombre}`;
166
+ // (2-4) El destino, por su TEXTO. Segmentos vacíos, `.` y `..` fuera de entrada: el
167
+ // `realpath` de después también los pararía, pero un destino que dice una cosa y resuelve
168
+ // a otra no debería llegar ni a la tarjeta de aprobación con un nombre engañoso.
169
+ const destinoVirtual = file_path.trim().startsWith("/") ? file_path.trim() : `/${file_path.trim()}`;
170
+ const segmentos = destinoVirtual.slice(1).split("/");
171
+ if (destinoVirtual.endsWith("/")
172
+ || destinoVirtual.includes("\\")
173
+ || destinoVirtual.includes("\0")
174
+ || segmentos.some((s) => s === "" || s === "." || s === "..")) {
175
+ return `«${file_path}» no es una ruta de fichero válida. Da la ruta completa con su nombre, como /icons/ic_add.png.`;
176
+ }
177
+ const porTexto = motivoDeDestino(donde.perfil, destinoVirtual);
178
+ if (porTexto !== undefined)
179
+ return porTexto;
180
+ const destinoReal = resolve(donde.raiz, destinoVirtual.slice(1));
181
+ if (aplanadaEnDisco(donde.raiz, destinoVirtual))
182
+ return porQueNo(destinoVirtual);
183
+ // (5a) El origen, por su CAMINO real. La carpeta puede no existir aún: eso es «no existe».
184
+ const origenReal = resolve(donde.carpetaDeAdjuntos, nombre);
185
+ // El tamaño se toma AQUÍ, del origen ya comprobado: medirlo en el destino después de copiar
186
+ // sería una llamada fuera del `try` que, en una carrera, rompería «nunca lanza».
187
+ let bytes;
188
+ try {
189
+ const st = lstatSync(origenReal);
190
+ bytes = st.size;
191
+ if (!st.isFile())
192
+ return `«${origenVirtual}» no es un fichero adjunto.`;
193
+ if (!dentroDe(realpathSync.native(origenReal), realpathSync.native(donde.carpetaDeAdjuntos))) {
194
+ return `«${origenVirtual}» apunta fuera de la carpeta de adjuntos.`;
195
+ }
196
+ }
197
+ catch {
198
+ return `No existe el adjunto «${origenVirtual}». Lista ${RUTA_ADJUNTOS} para ver cuáles hay.`;
199
+ }
200
+ // (5b) El destino, por su CAMINO real, ANTES de crear nada: el primer ancestro que existe
201
+ // tiene que caer dentro de la raíz, y lo que resulta se vuelve a juzgar como ruta virtual
202
+ // (un enlace `/icons` → `.xonecode/` pasa el texto y no esto).
203
+ let raizReal;
204
+ try {
205
+ raizReal = realpathSync.native(donde.raiz);
206
+ let ancestro = dirname(destinoReal);
207
+ const faltan = [];
208
+ while (!existeSinSeguir(ancestro)) {
209
+ const padre = dirname(ancestro);
210
+ if (padre === ancestro)
211
+ return `«${destinoVirtual}» apunta fuera del proyecto.`;
212
+ faltan.unshift(ancestro.slice(padre.length).replace(/^[\\/]+/, ""));
213
+ ancestro = padre;
214
+ }
215
+ const ancestroReal = realpathSync.native(ancestro);
216
+ if (!dentroDe(ancestroReal, raizReal) || !statSync(ancestroReal).isDirectory()) {
217
+ return `«${destinoVirtual}» apunta fuera del proyecto.`;
218
+ }
219
+ // El fichero final, si ya está, no puede ser un enlace (se seguiría) ni una carpeta.
220
+ let finalReal = resolve(ancestroReal, ...faltan, basename(destinoReal));
221
+ if (existeSinSeguir(destinoReal)) {
222
+ const st = lstatSync(destinoReal);
223
+ if (st.isSymbolicLink() || !st.isFile())
224
+ return `«${destinoVirtual}» ya existe y no es un fichero normal: no se reemplaza.`;
225
+ finalReal = realpathSync.native(destinoReal);
226
+ }
227
+ if (!dentroDe(finalReal, raizReal))
228
+ return `«${destinoVirtual}» apunta fuera del proyecto.`;
229
+ const virtualReal = comoVirtual(finalReal, raizReal);
230
+ const porCamino = motivoDeDestino(donde.perfil, virtualReal);
231
+ if (porCamino !== undefined)
232
+ return porCamino;
233
+ // Y la vista aplanada, también sobre el camino REAL: un enlace `/v` → `/pantallas`
234
+ // convierte `/v/menu.xml` en `/pantallas/menu.xml`, que el texto no ve.
235
+ if (aplanadaEnDisco(raizReal, virtualReal))
236
+ return porQueNo(virtualReal);
237
+ }
238
+ catch (error) {
239
+ return `No se pudo comprobar la ruta «${destinoVirtual}» (${codigoDe(error)}).`;
240
+ }
241
+ try {
242
+ mkdirSync(dirname(destinoReal), { recursive: true });
243
+ // Leer y escribir, y no `copyFileSync`: ése copia también el MODO, y un adjunto se guarda
244
+ // 0600 (es de la sesión), así que el fichero del proyecto nacería legible solo por su
245
+ // dueño — y así entraría en git. Con `mode: 0o644` un fichero NUEVO nace con el modo
246
+ // normal (0644 menos la umask del proceso); uno que ya existía conserva el suyo.
247
+ writeFileSync(destinoReal, readFileSync(origenReal), { mode: 0o644 });
248
+ }
249
+ catch (error) {
250
+ return `No se pudo incorporar «${origenVirtual}» (${codigoDe(error)}).`;
251
+ }
252
+ return `Incorporado ${origenVirtual} → ${destinoVirtual} (${bytes} bytes). Ya es un fichero del proyecto.`;
253
+ }, {
254
+ name: NOMBRE_INCORPORAR_ADJUNTO,
255
+ description: "Copia un ADJUNTO que la persona anexó en el chat (/adjuntos/…) a una ruta del PROYECTO"
256
+ + " —un icono a /icons/, una imagen—. Copia los bytes tal cual (sirve para binarios, que"
257
+ + " write_file no puede escribir). Si el destino ya existe, lo reemplaza. Pasa por la"
258
+ + " aprobación de la persona.",
259
+ schema: Entrada,
260
+ });
261
+ }
262
+ //# sourceMappingURL=incorporarAdjunto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"incorporarAdjunto.js","sourceRoot":"","sources":["../../../src/agent/grafo/incorporarAdjunto.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,7 @@ import { esRutaDeArtefacto, RUTA_ARTEFACTOS } from "../../core/artefactos.js";
12
12
  import { TOPE_DE_LLAMADAS_DEL_CONDUCTOR, TOPE_DE_LLAMADAS_DEL_ESPECIALISTA, } from "../turno/resumenDeContexto.js";
13
13
  import { esRutaDePlan, RUTA_PLANES } from "../../core/planes.js";
14
14
  import { artefactoFueraDeSitio } from "../../core/artefactos.js";
15
+ import { NOMBRE_INCORPORAR_ADJUNTO } from "../../core/adjuntos.js";
15
16
  /** Las tools de fichero que monta deepagents sobre el backend. */
16
17
  export const TOOLS_LECTURA = ["ls", "read_file", "glob", "grep"];
17
18
  export const TOOLS_ESCRITURA = ["write_file", "edit_file"];
@@ -37,10 +38,11 @@ export const DENEGADO_SIEMPRE = [
37
38
  // Las skills son instrucciones del harness, nunca ficheros que el agente pueda alterar.
38
39
  { operations: ["write"], paths: ["/skills", "/skills/**"], mode: "deny" },
39
40
  /**
40
- * Los ADJUNTOS de una tarea (`core/adjuntos.ts`), de solo lectura por lo mismo que las
41
- * skills: son material de ENTRADA —los documentos que anexó la persona que creó la
42
- * tarea—, no ficheros que reescribir. Leerlos es justamente su razón de ser, así que la
43
- * denegación es solo de `write`.
41
+ * Los ADJUNTOS (`core/adjuntos.ts`), de solo lectura por lo mismo que las skills: son
42
+ * material de ENTRADA —los documentos que anexó la persona, al crear una TAREA o, desde
43
+ * IXCODE-7, en el CHAT de una sesión—, no ficheros que reescribir. Leerlos es justamente su
44
+ * razón de ser, así que la denegación es solo de `write`. Meterlos DENTRO del proyecto es
45
+ * `incorporar_adjunto`, otra tool, con su propia fila de aprobación.
44
46
  *
45
47
  * **Y es incondicional, no «solo si están montados».** Medido contra deepagents 1.13.2:
46
48
  * sin esta fila, un `write_file` a `/adjuntos/x.txt` en una consola donde la carpeta NO
@@ -256,6 +258,7 @@ export function toolsDe(perfil) {
256
258
  export const TEXTO_HITL = {
257
259
  write_file: "escribir un fichero del proyecto",
258
260
  edit_file: "modificar un fichero del proyecto",
261
+ [NOMBRE_INCORPORAR_ADJUNTO]: "copiar un adjunto al proyecto",
259
262
  };
260
263
  /**
261
264
  * El HITL de un perfil: **sobre las tools de FICHERO**, no sobre las de MCP.
@@ -271,7 +274,11 @@ export function hitlDe(perfil) {
271
274
  if (perfil.soloLectura)
272
275
  return {};
273
276
  const salida = {};
274
- for (const tool of TOOLS_ESCRITURA) {
277
+ // `incorporar_adjunto` (`incorporarAdjunto.ts`) también ESCRIBE el proyecto, y no por el
278
+ // backend: tras el «sí» es la propia tool la que copia. Sin su fila aquí copiaría sin que nadie
279
+ // lo aprobara. Va a todo el que escribe aunque no la tenga montada: una clave de más en
280
+ // `interruptOn` no hace nada, y una de menos es una escritura sin aprobación.
281
+ for (const tool of [...TOOLS_ESCRITURA, NOMBRE_INCORPORAR_ADJUNTO]) {
275
282
  salida[tool] = {
276
283
  allowedDecisions: ["approve", "reject"],
277
284
  // El nombre del perfil va DENTRO de la descripción por necesidad: el interrupt que
@@ -1 +1 @@
1
- {"version":3,"file":"perfiles.js","sourceRoot":"","sources":["../../../src/agent/grafo/perfiles.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"perfiles.js","sourceRoot":"","sources":["../../../src/agent/grafo/perfiles.ts"],"names":[],"mappings":"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"}