xonecode 0.8.2 → 0.8.10

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.
@@ -0,0 +1,37 @@
1
+ import { invocarConModelos, PAPEL_DEL_JUEZ } from "../tareas/juezDeTarea.js";
2
+ import { promptDelJuezDelTurno, veredictoDelTurnoDeTexto, } from "../../core/juezDelTurno.js";
3
+ /**
4
+ * El juez del turno cableado a un modelo de verdad.
5
+ *
6
+ * Reusa `invocarConModelos` y `PAPEL_DEL_JUEZ` del juez de TAREAS en vez de repetirlos: es
7
+ * la misma pregunta con otro alcance —«¿esto cumple lo que se pidió?»— y el papel `afilado`
8
+ * está reservado justo para eso. Dos caminos para invocar al juez serían dos sitios donde
9
+ * elegir el modelo, y ya pasó con las cuatro copias de `VARIABLES_POR_PROVEEDOR`.
10
+ *
11
+ * **Lo caro de este juez es lo que NO se le manda.** Ve el objetivo, la respuesta y cuatro
12
+ * hechos medidos; nunca el contenido de un fichero ni el transcript. Por eso una llamada
13
+ * suya cuesta del orden de unos cientos de tokens contra los cientos de miles de un turno,
14
+ * y puede correr en todos sin que se note en la cuenta.
15
+ *
16
+ * **Un fallo suyo NO lanza**: devuelve `dudoso` con el motivo. Es una opinión sobre trabajo
17
+ * que ya está hecho, y el turno lo trata como tal — `turnoReal.ts` también tiene su `catch`,
18
+ * porque un juez que se cae no puede llevarse por delante lo que el turno logró. Aquí se
19
+ * prefiere el veredicto degradado al throw: así el aviso dice «no está claro» en vez de
20
+ * «no se pudo consultar», que es más honesto sobre lo que le pasa a quien lee.
21
+ */
22
+ export function crearJuezDelTurno(modelos) {
23
+ const invocar = invocarConModelos(modelos);
24
+ return async (caso) => {
25
+ try {
26
+ const texto = await invocar(PAPEL_DEL_JUEZ, promptDelJuezDelTurno(caso), "");
27
+ return veredictoDelTurnoDeTexto(texto);
28
+ }
29
+ catch (error) {
30
+ return {
31
+ cumplimiento: "dudoso",
32
+ motivo: `no se pudo preguntar al juez (${error instanceof Error ? error.name : "error"})`,
33
+ };
34
+ }
35
+ };
36
+ }
37
+ //# sourceMappingURL=juezDelTurnoConModelo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"juezDelTurnoConModelo.js","sourceRoot":"","sources":["../../../src/agent/turno/juezDelTurnoConModelo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EACL,qBAAqB,EACrB,wBAAwB,GAGzB,MAAM,4BAA4B,CAAC;AAGpC;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAoB;IAKpD,MAAM,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC3C,OAAO,KAAK,EAAE,IAAI,EAAE,EAAE;QACpB,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,cAAc,EAAE,qBAAqB,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;YAC7E,OAAO,wBAAwB,CAAC,KAAK,CAAC,CAAC;QACzC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,YAAY,EAAE,QAAQ;gBACtB,MAAM,EAAE,iCAAiC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,GAAG;aAC1F,CAAC;QACJ,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,51 @@
1
+ import { appendFileSync, mkdirSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { falloLegible, registroDeFallo } from "../../core/fallos.js";
4
+ export const NOMBRE_REGISTRO_DE_FALLOS = "fallos.jsonl";
5
+ /** Dónde queda, para poder decírselo a quien acaba de ver el error. */
6
+ export function rutaDeFallos(raiz) {
7
+ return join(raiz, ".xonecode", NOMBRE_REGISTRO_DE_FALLOS);
8
+ }
9
+ /**
10
+ * El registro de fallos de un proyecto. **Siempre encendido, y ésa es la decisión.**
11
+ *
12
+ * La traza de tools es opt-in (`XONECODE_TRACE_TOOLS`) y tiene sentido: se enciende cuando
13
+ * vas a MEDIR. Esto es lo contrario — un fallo no se planea, y el problema de una bandera
14
+ * es exactamente que cuando pasó no estaba puesta. Toda la investigación de hoy se hizo
15
+ * sobre lo que se pudo pegar del chat, con el error truncado y sin saber ni el modelo.
16
+ *
17
+ * Se puede permitir estar siempre porque solo escribe cuando algo revienta y lo que
18
+ * escribe cabe en una pantalla: ni prompts, ni argumentos, ni contenido de ficheros (ver
19
+ * `core/fallos.ts`). Un turno normal no toca este fichero.
20
+ *
21
+ * Síncrono y con el fallo tragado, como la traza: anotar un error no puede provocar otro,
22
+ * y un `appendFileSync` de trescientos bytes que se pierde si el proceso muere sería justo
23
+ * el caso en el que hacía falta.
24
+ */
25
+ export function crearRegistroDeFallos(raiz) {
26
+ return {
27
+ anotar: (fallo) => {
28
+ let registro;
29
+ try {
30
+ registro = registroDeFallo(fallo);
31
+ }
32
+ catch {
33
+ // Ni siquiera componer el registro puede tumbar nada: si el error es tan raro que
34
+ // no se deja describir, se pierde el registro y no el turno.
35
+ return undefined;
36
+ }
37
+ const ruta = rutaDeFallos(raiz);
38
+ try {
39
+ mkdirSync(join(raiz, ".xonecode"), { recursive: true });
40
+ appendFileSync(ruta, `${JSON.stringify(registro)}\n`, "utf8");
41
+ }
42
+ catch {
43
+ // Sin disco donde escribir sigue habiendo algo que enseñar: el texto se devuelve
44
+ // igual. Lo que se pierde es la copia, no la información.
45
+ return { ruta, legible: falloLegible(registro) };
46
+ }
47
+ return { ruta, legible: falloLegible(registro) };
48
+ },
49
+ };
50
+ }
51
+ //# sourceMappingURL=registroDeFallos.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registroDeFallos.js","sourceRoot":"","sources":["../../../src/agent/turno/registroDeFallos.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,eAAe,EAAwB,MAAM,sBAAsB,CAAC;AAE3F,MAAM,CAAC,MAAM,yBAAyB,GAAG,cAAc,CAAC;AAExD,uEAAuE;AACvE,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,yBAAyB,CAAC,CAAC;AAC5D,CAAC;AAYD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,OAAO;QACL,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;YAChB,IAAI,QAAyB,CAAC;YAC9B,IAAI,CAAC;gBACH,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;YACpC,CAAC;YAAC,MAAM,CAAC;gBACP,kFAAkF;gBAClF,6DAA6D;gBAC7D,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;YAChC,IAAI,CAAC;gBACH,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBACxD,cAAc,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAChE,CAAC;YAAC,MAAM,CAAC;gBACP,iFAAiF;gBACjF,0DAA0D;gBAC1D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnD,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnD,CAAC;KACF,CAAC;AACJ,CAAC"}