xonecode 0.38.38 → 0.38.41
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.
- package/apps/web/dist/assets/{EditorDeFichero-2YnZJtI9.js → EditorDeFichero-B5qtmfKO.js} +1 -1
- package/apps/web/dist/assets/{index-CUUDueEn.js → index-C6XoIOQg.js} +40 -40
- package/apps/web/dist/assets/{php-CAS8AIDx.js → php-I6JfbNBQ.js} +1 -1
- package/apps/web/dist/assets/{ruby-DzWfglDv.js → ruby-DlqXDLOX.js} +1 -1
- package/apps/web/dist/index.html +1 -1
- package/dist/agent/config/diagnosticoDeNodeEnMaquina.js +25 -5
- package/dist/agent/config/diagnosticoDeNodeEnMaquina.js.map +1 -1
- package/dist/agent/exportarPdf.js +18 -2
- package/dist/agent/exportarPdf.js.map +1 -1
- package/dist/agent/motores/trueforge/sesionTrueforge.js +23 -2
- package/dist/agent/motores/trueforge/sesionTrueforge.js.map +1 -1
- package/dist/agent/subagentes/subagenteExterno.js +81 -6
- package/dist/agent/subagentes/subagenteExterno.js.map +1 -1
- package/dist/agent/turno/diagnosticoDeTools.js +14 -0
- package/dist/agent/turno/diagnosticoDeTools.js.map +1 -1
- package/dist/core/comandoExterno.js +12 -4
- package/dist/core/comandoExterno.js.map +1 -1
- package/dist/core/diagnosticoDeNode.js +1 -1
- package/dist/core/diagnosticoDeNode.js.map +1 -1
- package/dist/core/ports.js.map +1 -1
- package/dist/core/shellDeAgente.js +34 -2
- package/dist/core/shellDeAgente.js.map +1 -1
- package/dist/web/servidor/arranque.js +36 -15
- package/dist/web/servidor/arranque.js.map +1 -1
- package/dist/web/servidor/soporte.js +8 -1
- package/dist/web/servidor/soporte.js.map +1 -1
- package/package.json +1 -1
package/apps/web/dist/index.html
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
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-
|
|
10
|
+
<script type="module" crossorigin src="./assets/index-C6XoIOQg.js"></script>
|
|
11
11
|
<link rel="stylesheet" crossorigin href="./assets/index-BQdHnRbo.css">
|
|
12
12
|
</head>
|
|
13
13
|
<!-- Sin el atributo aquí: el oscuro es SOLO del splash (el registro de entorno y
|
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
import { exec, execFile } from "node:child_process";
|
|
2
2
|
import { createRequire } from "node:module";
|
|
3
|
-
import { mkdtempSync, rmSync } from "node:fs";
|
|
3
|
+
import { existsSync, mkdtempSync, rmSync } from "node:fs";
|
|
4
4
|
import { tmpdir } from "node:os";
|
|
5
5
|
import { join } from "node:path";
|
|
6
6
|
import { promisify } from "node:util";
|
|
7
7
|
import { motivoDeFallo } from "../../core/diagnosticoDeNode.js";
|
|
8
8
|
import { versionDeSalida } from "../../core/motoresLocales.js";
|
|
9
|
+
import { entornoDeShell } from "../../core/shellDeAgente.js";
|
|
9
10
|
import { scriptsConRuta } from "../grafo/proyecto.js";
|
|
10
11
|
import { skillsConRuta } from "../grafo/skills.js";
|
|
11
12
|
import { binarioDeClaudeDelSdk } from "../motores/motoresLocales.js";
|
|
12
13
|
import { comoLanzarElSimulador } from "../turno/verificador.js";
|
|
14
|
+
import { navegadorParaImprimir } from "../exportarPdf.js";
|
|
13
15
|
/**
|
|
14
16
|
* Las medidas de `core/diagnosticoDeNode.ts` en la máquina de verdad. Cada una con su tope, y ninguna devuelve una ruta:
|
|
15
17
|
* los motivos salen de `motivoDeFallo` (el `code`, nunca el mensaje de Node). Las dependencias se inyectan para que el
|
|
@@ -22,14 +24,20 @@ const SCRIPT_DE_PRUEBA = "xone-hotswap";
|
|
|
22
24
|
const execFileP = promisify(execFile);
|
|
23
25
|
const execP = promisify(exec);
|
|
24
26
|
async function ejecutarReal(programa, args, opciones) {
|
|
27
|
+
const env = opciones.entorno;
|
|
25
28
|
// `node` a secas en Windows va por la shell: es como lo encuentra quien lo teclea, y lo que el diagnóstico quiere saber.
|
|
26
29
|
if (opciones.shell) {
|
|
27
|
-
const { stdout } = await execP([programa, ...args].join(" "), { timeout: TOPE_DEL_DIAGNOSTICO_MS, windowsHide: true, encoding: "utf8" });
|
|
30
|
+
const { stdout } = await execP([programa, ...args].join(" "), { timeout: TOPE_DEL_DIAGNOSTICO_MS, windowsHide: true, encoding: "utf8", ...(env === undefined ? {} : { env }) });
|
|
28
31
|
return { stdout: String(stdout) };
|
|
29
32
|
}
|
|
30
|
-
const { stdout } = await execFileP(programa, [...args], { timeout: TOPE_DEL_DIAGNOSTICO_MS, windowsHide: true, encoding: "utf8" });
|
|
33
|
+
const { stdout } = await execFileP(programa, [...args], { timeout: TOPE_DEL_DIAGNOSTICO_MS, windowsHide: true, encoding: "utf8", ...(env === undefined ? {} : { env }) });
|
|
31
34
|
return { stdout: String(stdout) };
|
|
32
35
|
}
|
|
36
|
+
/** El entorno de la shell de los agentes, sin proyecto: el MISMO `entornoDeShell` con los scripts de todas las skills. */
|
|
37
|
+
function entornoDeAgenteReal() {
|
|
38
|
+
const skills = skillsConRuta().map((m) => ({ nombre: m.nombre, dir: m.dir }));
|
|
39
|
+
return entornoDeShell({ entorno: process.env, skills, binarios: skills.map((s) => join(s.dir, "scripts")).filter((d) => existsSync(d)) });
|
|
40
|
+
}
|
|
33
41
|
function leerVersion(id) {
|
|
34
42
|
try {
|
|
35
43
|
return createRequire(import.meta.url)(id).version;
|
|
@@ -60,14 +68,19 @@ export async function medirDiagnosticoDeNode(deps = {}) {
|
|
|
60
68
|
return { ok: false, motivo: motivoDeFallo(e) };
|
|
61
69
|
}
|
|
62
70
|
};
|
|
63
|
-
const
|
|
71
|
+
const entorno = (deps.entornoDeAgente ?? entornoDeAgenteReal)();
|
|
72
|
+
// «node» en el PATH DE LOS AGENTES, no en el del servidor: es el que usan sus comandos.
|
|
73
|
+
const nodeEnPath = intentar(async () => versionDeSalida((await ejecutar("node", ["--version"], { shell: windows, entorno })).stdout));
|
|
64
74
|
const lista = (deps.scripts ?? (() => scriptsConRuta(undefined, skillsConRuta().map((s) => s.nombre), plataforma)))();
|
|
65
75
|
const elegido = lista.find((s) => s.nombre === SCRIPT_DE_PRUEBA) ?? lista[0];
|
|
66
76
|
const scripts = elegido === undefined
|
|
67
77
|
? Promise.resolve({ ok: false, cuantos: 0, motivo: "no se detecta ningún script en las skills" })
|
|
68
78
|
: intentar(async () => {
|
|
69
79
|
// La MISMA llamada que haría el agente: por su nombre fuera de Windows, con `node <ruta>` en Windows.
|
|
70
|
-
|
|
80
|
+
// Como lo lanza el agente: por su nombre fuera de Windows; en Windows, con el Node del servidor (`comandoConNode`).
|
|
81
|
+
await (windows
|
|
82
|
+
? ejecutar(deps.nodeDelServidor ?? process.execPath, [elegido.ruta, "--help"], { shell: false, entorno })
|
|
83
|
+
: ejecutar(elegido.ruta, ["--help"], { shell: false, entorno }));
|
|
71
84
|
return `${elegido.nombre} --help`;
|
|
72
85
|
}).then((l) => ({ ...l, cuantos: lista.length }));
|
|
73
86
|
const simulador = intentar(async () => {
|
|
@@ -107,6 +120,13 @@ export async function medirDiagnosticoDeNode(deps = {}) {
|
|
|
107
120
|
scripts: await scripts,
|
|
108
121
|
simulador: await simulador,
|
|
109
122
|
claudeCode: await claudeCode,
|
|
123
|
+
// Solo el NOMBRE del programa (msedge.exe, Google Chrome): la ruta no cruza.
|
|
124
|
+
navegador: (() => {
|
|
125
|
+
const n = (deps.navegador ?? (() => navegadorParaImprimir(existsSync, plataforma)))();
|
|
126
|
+
return n === undefined
|
|
127
|
+
? { ok: false, motivo: "no hay Chrome, Edge, Chromium ni Brave: el crítico no podrá medir la maqueta" }
|
|
128
|
+
: { ok: true, valor: n.split(/[\\/]/).pop() ?? n };
|
|
129
|
+
})(),
|
|
110
130
|
};
|
|
111
131
|
}
|
|
112
132
|
//# sourceMappingURL=diagnosticoDeNodeEnMaquina.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagnosticoDeNodeEnMaquina.js","sourceRoot":"","sources":["../../../src/agent/config/diagnosticoDeNodeEnMaquina.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"diagnosticoDeNodeEnMaquina.js","sourceRoot":"","sources":["../../../src/agent/config/diagnosticoDeNodeEnMaquina.ts"],"names":[],"mappings":"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"}
|
|
@@ -36,10 +36,26 @@ export const NAVEGADORES_CONOCIDOS = [
|
|
|
36
36
|
"/usr/bin/google-chrome",
|
|
37
37
|
"/usr/bin/google-chrome-stable",
|
|
38
38
|
];
|
|
39
|
+
/**
|
|
40
|
+
* Los de WINDOWS, por sus carpetas de programas (de las variables, nunca una letra de unidad a fuego). Edge va primero: lo
|
|
41
|
+
* trae todo Windows. Medido en la máquina Windows de un usuario: con solo las rutas de macOS y Linux, el crítico de pantalla
|
|
42
|
+
* decía «no hay Chrome ni Chromium» y comparaba contra una descripción en vez de medir las cajas de la maqueta.
|
|
43
|
+
*/
|
|
44
|
+
export function navegadoresDeWindows(entorno) {
|
|
45
|
+
const bases = [entorno["ProgramFiles(x86)"], entorno["ProgramFiles"], entorno["LOCALAPPDATA"]].filter((b) => b !== undefined && b !== "");
|
|
46
|
+
const relativos = [
|
|
47
|
+
"Microsoft\\Edge\\Application\\msedge.exe",
|
|
48
|
+
"Google\\Chrome\\Application\\chrome.exe",
|
|
49
|
+
"Chromium\\Application\\chrome.exe",
|
|
50
|
+
"BraveSoftware\\Brave-Browser\\Application\\brave.exe",
|
|
51
|
+
];
|
|
52
|
+
return relativos.flatMap((r) => bases.map((b) => `${b.replace(/[\\/]$/, "")}\\${r}`));
|
|
53
|
+
}
|
|
39
54
|
/** El primero que exista, o AUSENTE. Ausente = aquí no se puede imprimir, y se DICE con el
|
|
40
55
|
* remedio: no hay forma de adivinar que lo que falta es un navegador. */
|
|
41
|
-
export function navegadorParaImprimir(existe = existsSync) {
|
|
42
|
-
|
|
56
|
+
export function navegadorParaImprimir(existe = existsSync, plataforma = process.platform, entorno = process.env) {
|
|
57
|
+
const lista = plataforma === "win32" ? navegadoresDeWindows(entorno) : [...NAVEGADORES_CONOCIDOS];
|
|
58
|
+
return lista.find((ruta) => existe(ruta));
|
|
43
59
|
}
|
|
44
60
|
/** Qué decir cuando no hay ninguno. Vive aquí y no en quien llama para que las tres pieles
|
|
45
61
|
* digan lo mismo. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exportarPdf.js","sourceRoot":"","sources":["../../src/agent/exportarPdf.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACvF,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpD,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,UAAU,EACV,8BAA8B,EAC9B,SAAS,GACV,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAE7F;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,8DAA8D;IAC9D,oDAAoD;IACpD,gEAAgE;IAChE,8DAA8D;IAC9D,mBAAmB;IACnB,2BAA2B;IAC3B,wBAAwB;IACxB,+BAA+B;CACvB,CAAC;AAEX;0EAC0E;AAC1E,MAAM,UAAU,qBAAqB,
|
|
1
|
+
{"version":3,"file":"exportarPdf.js","sourceRoot":"","sources":["../../src/agent/exportarPdf.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACvF,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpD,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,UAAU,EACV,8BAA8B,EAC9B,SAAS,GACV,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAE7F;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,8DAA8D;IAC9D,oDAAoD;IACpD,gEAAgE;IAChE,8DAA8D;IAC9D,mBAAmB;IACnB,2BAA2B;IAC3B,wBAAwB;IACxB,+BAA+B;CACvB,CAAC;AAEX;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAqD;IACxF,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IACvJ,MAAM,SAAS,GAAG;QAChB,0CAA0C;QAC1C,yCAAyC;QACzC,mCAAmC;QACnC,sDAAsD;KACvD,CAAC;IACF,OAAO,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AACxF,CAAC;AAED;0EAC0E;AAC1E,MAAM,UAAU,qBAAqB,CACnC,SAAoC,UAAU,EAC9C,aAAqB,OAAO,CAAC,QAAQ,EACrC,UAAwD,OAAO,CAAC,GAAG;IAEnE,MAAM,KAAK,GAAG,UAAU,KAAK,OAAO,CAAC,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC;IAClG,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED;sBACsB;AACtB,MAAM,CAAC,MAAM,aAAa,GACxB,qGAAqG;IACrG,sDAAsD,CAAC;AAIzD;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,QAmBlC;IACC,MAAM,QAAQ,GAAG,uBAAuB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACxD,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IACvD,MAAM,aAAa,GAAG,8BAA8B,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACpE,IAAI,aAAa,KAAK,SAAS;QAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;IAEjE,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,IAAI,CAAC,QAAQ,CAAC,eAAe,IAAI,qBAAqB,CAAC,EAAE,CAAC;IAC9F,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;IAE7D,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;IACrD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,IAAI,QAAQ,CAAC,IAAI,0BAA0B,EAAE,CAAC;IAEvF,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,oFAAoF;QACpF,OAAO,EAAE,KAAK,EAAE,oBAAoB,QAAQ,CAAC,IAAI,GAAG,EAAE,CAAC;IACzD,CAAC;IAED,gGAAgG;IAChG,0FAA0F;IAC1F,8DAA8D;IAC9D,MAAM,GAAG,CAAC,MAAM,sBAAsB,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;IAE7G,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,IAAI,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC/F,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,KAAK,EAAE,yBAAyB,QAAQ,CAAC,IAAI,GAAG,EAAE,CAAC;IAC9D,CAAC;IAED,qFAAqF;IACrF,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,eAAe,CAAC,CAAC,CAAC;IAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IACjE,IAAI,CAAC;QACH,aAAa,CACX,IAAI,EACJ,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC;YACvB,CAAC,CAAC,mBAAmB,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACtD,CAAC,CAAC,oFAAoF;gBACpF,kFAAkF;gBAClF,eAAe;gBACf,qBAAqB,CAAC,MAAM,CAAC,EACjC,MAAM,CACP,CAAC;QACF,MAAM,CAAC,QAAQ,CAAC,QAAQ,IAAI,eAAe,CAAC,CAAC,SAAS,EAAE;YACtD,YAAY;YACZ,eAAe;YACf,mFAAmF;YACnF,2DAA2D;YAC3D,sFAAsF;YACtF,wFAAwF;YACxF,iDAAiD;YACjD,wBAAwB;YACxB,kBAAkB,OAAO,EAAE;YAC3B,UAAU,IAAI,EAAE;SACjB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACtE,OAAO,EAAE,KAAK,EAAE,kCAAkC,MAAM,EAAE,EAAE,CAAC;IAC/D,CAAC;YAAS,CAAC;QACT,6EAA6E;QAC7E,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,4FAA4F;IAC5F,uFAAuF;IACvF,oBAAoB;IACpB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,8CAA8C,EAAE,CAAC;IAC3F,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;AAC5C,CAAC;AAED,2DAA2D;AAC3D,KAAK,UAAU,YAAY,CAAC,QAAgB;IAC1C,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC1C,OAAO,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAW,CAAC;AAC5D,CAAC;AAED,SAAS,eAAe,CAAC,SAAiB,EAAE,UAA6B;IACvE,OAAO,IAAI,OAAO,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;QACxC,QAAQ,CAAC,SAAS,EAAE,CAAC,GAAG,UAAU,CAAC,EAAE,EAAE,OAAO,EAAE,oBAAoB,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE;QAChF,wFAAwF;QACxF,gEAAgE;QAChE,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAC9C,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED;gDACgD;AAChD,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC"}
|
|
@@ -42,6 +42,7 @@ import { cambiosQueSeVerifican, huellaDeErrores, repartirHallazgos, textoDeRepar
|
|
|
42
42
|
import { correrTurno } from "../../../core/turno.js";
|
|
43
43
|
import { createTokenTracker } from "../../../vendor/tokenTracking.js";
|
|
44
44
|
import { MAX_APPROVAL_ROUNDS } from "../../../vendor/hitl.js";
|
|
45
|
+
import { resumenDelEntorno } from "../../../core/shellDeAgente.js";
|
|
45
46
|
import { artefactosNuevos, backendDeAgente, entornoDeLaShellDelProyecto, fotoDeArtefactos, lectorDelDispositivoDeSesion, scriptsConRuta } from "../../grafo/proyecto.js";
|
|
46
47
|
import { carpetaDeHotswap } from "../../../core/hotswap.js";
|
|
47
48
|
import { cargarAgentes } from "../../subagentes/agentesEnDisco.js";
|
|
@@ -543,6 +544,15 @@ export async function abrirSesionTrueforge(opciones) {
|
|
|
543
544
|
// El CHAT es la sesión con la que se abrió (`opciones.hilo`, el id del índice), no el `hilo` de
|
|
544
545
|
// ahora: `/nuevo` abre otro hilo huérfano pero los actos siguen yendo a la misma sesión.
|
|
545
546
|
const diagnostico = opciones.diagnostico ?? crearDiagnosticoDeTools(raiz, entornoDeDiagnostico, opciones.hilo);
|
|
547
|
+
/** La traza del entorno de NUESTRA shell (la de quien ejecuta), una vez por sesión: es la misma para todos. */
|
|
548
|
+
let entornoTrazado = false;
|
|
549
|
+
const conTrazaDelEntorno = (entorno) => {
|
|
550
|
+
if (!entornoTrazado) {
|
|
551
|
+
entornoTrazado = true;
|
|
552
|
+
diagnostico?.entorno?.("shell propia", resumenDelEntorno(entorno, { plataforma: process.platform, existe: existsSync }));
|
|
553
|
+
}
|
|
554
|
+
return entorno;
|
|
555
|
+
};
|
|
546
556
|
/**
|
|
547
557
|
* La traza de EXCEPCIONES e HITOS, la MISMA de deepagents (`turnoReal.ts`) y que aquí
|
|
548
558
|
* faltaba por completo: TrueForge nunca la encendía, ni siquiera con la variable de entorno
|
|
@@ -1048,10 +1058,19 @@ export async function abrirSesionTrueforge(opciones) {
|
|
|
1048
1058
|
lecturas: [carpeta, carpetaDeHotswap(carpeta)],
|
|
1049
1059
|
// En Windows un script sin extensión no se lanza por su nombre: la segunda llave lo reescribe a `node '<ruta>'`.
|
|
1050
1060
|
...(process.platform === "win32"
|
|
1051
|
-
? { rutasConNode: Object.fromEntries(scriptsDelHijo.map((s) => [s.nombre, s.ruta])) }
|
|
1061
|
+
? { rutasConNode: Object.fromEntries(scriptsDelHijo.map((s) => [s.nombre, s.ruta])), nodeDelServidor: process.execPath }
|
|
1052
1062
|
: {}),
|
|
1053
1063
|
}
|
|
1054
1064
|
: undefined;
|
|
1065
|
+
// La traza del ENTORNO de su shell (con «Depurar»): medido en Windows, el PATH estaba roto y la traza no decía nada.
|
|
1066
|
+
if (ejecucion !== undefined) {
|
|
1067
|
+
diagnostico?.entorno?.(agente.nombre, resumenDelEntorno(ejecucion.entorno, {
|
|
1068
|
+
plataforma: process.platform,
|
|
1069
|
+
existe: existsSync,
|
|
1070
|
+
scripts: ejecucion.scripts.length,
|
|
1071
|
+
...("nodeDelServidor" in ejecucion && ejecucion.nodeDelServidor !== undefined ? { nodeDelServidor: ejecucion.nodeDelServidor } : {}),
|
|
1072
|
+
}));
|
|
1073
|
+
}
|
|
1055
1074
|
// Las carpetas de la sesión se LEEN aunque no ejecute: es donde el orquestador le deja la maqueta y las capturas.
|
|
1056
1075
|
const lecturasDeSesion = motor === "claude-code" && carpeta !== undefined ? [carpeta, carpetaDeHotswap(carpeta)] : undefined;
|
|
1057
1076
|
/**
|
|
@@ -1103,6 +1122,8 @@ export async function abrirSesionTrueforge(opciones) {
|
|
|
1103
1122
|
...(lecturasDeSesion === undefined ? {} : { lecturas: lecturasDeSesion }),
|
|
1104
1123
|
// El esfuerzo de su `.md`, que Claude Code aplica como `effort`; los otros dos no tienen dónde recibirlo.
|
|
1105
1124
|
...(motor === "claude-code" && agente.esfuerzo !== undefined ? { esfuerzo: agente.esfuerzo } : {}),
|
|
1125
|
+
// Su shell y sus negativas, a la traza (con «Depurar»).
|
|
1126
|
+
...(diagnostico?.externo === undefined ? {} : { trazar: (d) => diagnostico.externo(agente.nombre, d) }),
|
|
1106
1127
|
}),
|
|
1107
1128
|
senal: () => aborto?.signal,
|
|
1108
1129
|
}),
|
|
@@ -1184,7 +1205,7 @@ export async function abrirSesionTrueforge(opciones) {
|
|
|
1184
1205
|
// El aparato elegido manda también en la shell (IXCODE-32): del MISMO fichero que leen los scripts.
|
|
1185
1206
|
dispositivo: lectorDelDispositivoDeSesion(opciones.artefactos),
|
|
1186
1207
|
conShell: () => montarBackend({
|
|
1187
|
-
entorno: entornoDeLaShellDelProyecto(raiz, opciones.artefactos),
|
|
1208
|
+
entorno: conTrazaDelEntorno(entornoDeLaShellDelProyecto(raiz, opciones.artefactos)),
|
|
1188
1209
|
// El MISMO patrón que ya usa `modeloParaTrueforge` un poco más arriba en este
|
|
1189
1210
|
// fichero: un getter que se reevalúa en cada llamada, así siempre lee el
|
|
1190
1211
|
// `AbortController` de la RONDA en curso y no uno capturado al construir.
|