xonecode 0.6.0 → 0.8.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 (128) hide show
  1. package/apps/web/dist/assets/{index-rqecK6s2.css → index-Boak51UP.css} +1 -1
  2. package/apps/web/dist/assets/index-Cg28x6nG.js +477 -0
  3. package/apps/web/dist/assets/{php-BBij3Lhc.js → php-Cu6F_QCJ.js} +1 -1
  4. package/apps/web/dist/assets/{ruby-Dq2YEaLo.js → ruby-BiqQPoC6.js} +1 -1
  5. package/apps/web/dist/index.html +2 -2
  6. package/dist/agent/cloudstudio/cloudstudioClient.js +10 -0
  7. package/dist/agent/cloudstudio/cloudstudioClient.js.map +1 -1
  8. package/dist/agent/cloudstudio/descarga.js +14 -4
  9. package/dist/agent/cloudstudio/descarga.js.map +1 -1
  10. package/dist/agent/cloudstudio/ramaActiva.js +11 -0
  11. package/dist/agent/cloudstudio/ramaActiva.js.map +1 -0
  12. package/dist/agent/cloudstudio/subida.js +13 -4
  13. package/dist/agent/cloudstudio/subida.js.map +1 -1
  14. package/dist/agent/config/catalogoModelos.js +45 -0
  15. package/dist/agent/config/catalogoModelos.js.map +1 -1
  16. package/dist/agent/config/modelos.js +103 -12
  17. package/dist/agent/config/modelos.js.map +1 -1
  18. package/dist/agent/config/mudanzaEnDisco.js +121 -0
  19. package/dist/agent/config/mudanzaEnDisco.js.map +1 -0
  20. package/dist/agent/config/selectorEnMaquina.js +45 -0
  21. package/dist/agent/config/selectorEnMaquina.js.map +1 -0
  22. package/dist/agent/config/settingsEnDisco.js +35 -0
  23. package/dist/agent/config/settingsEnDisco.js.map +1 -1
  24. package/dist/agent/dispositivos/juezVisual.js +152 -0
  25. package/dist/agent/dispositivos/juezVisual.js.map +1 -0
  26. package/dist/agent/dispositivos/sensorDeArranque.js +154 -0
  27. package/dist/agent/dispositivos/sensorDeArranque.js.map +1 -0
  28. package/dist/agent/exportarPdf.js +140 -0
  29. package/dist/agent/exportarPdf.js.map +1 -0
  30. package/dist/agent/grafo/criticaVisual.js +115 -0
  31. package/dist/agent/grafo/criticaVisual.js.map +1 -0
  32. package/dist/agent/grafo/navegacionXone.js +37 -4
  33. package/dist/agent/grafo/navegacionXone.js.map +1 -1
  34. package/dist/agent/grafo/perfiles.js +52 -9
  35. package/dist/agent/grafo/perfiles.js.map +1 -1
  36. package/dist/agent/grafo/proyecto.js +74 -7
  37. package/dist/agent/grafo/proyecto.js.map +1 -1
  38. package/dist/agent/grafo/skills.js +32 -0
  39. package/dist/agent/grafo/skills.js.map +1 -1
  40. package/dist/agent/grafo/xoneAgent.js +103 -13
  41. package/dist/agent/grafo/xoneAgent.js.map +1 -1
  42. package/dist/agent/navegacion/estilosEnDisco.js +110 -0
  43. package/dist/agent/navegacion/estilosEnDisco.js.map +1 -0
  44. package/dist/agent/navegacion/hechosEnDisco.js +26 -0
  45. package/dist/agent/navegacion/hechosEnDisco.js.map +1 -0
  46. package/dist/agent/navegacion/indiceEnDisco.js +15 -0
  47. package/dist/agent/navegacion/indiceEnDisco.js.map +1 -1
  48. package/dist/agent/subagentes/agentesEnDisco.js +85 -24
  49. package/dist/agent/subagentes/agentesEnDisco.js.map +1 -1
  50. package/dist/agent/subagentes/escrituraExterna.js +53 -0
  51. package/dist/agent/subagentes/escrituraExterna.js.map +1 -1
  52. package/dist/agent/subagentes/pluginDeSkills.js +99 -0
  53. package/dist/agent/subagentes/pluginDeSkills.js.map +1 -0
  54. package/dist/agent/subagentes/subagenteExterno.js +48 -0
  55. package/dist/agent/subagentes/subagenteExterno.js.map +1 -1
  56. package/dist/agent/subagentes/subagenteOpencode.js +53 -1
  57. package/dist/agent/subagentes/subagenteOpencode.js.map +1 -1
  58. package/dist/agent/tareas/juezDeTarea.js +1 -1
  59. package/dist/agent/tareas/juezDeTarea.js.map +1 -1
  60. package/dist/agent/tareas/tareasEnDisco.js +49 -0
  61. package/dist/agent/tareas/tareasEnDisco.js.map +1 -1
  62. package/dist/agent/turno/diagnosticoDeTools.js +5 -1
  63. package/dist/agent/turno/diagnosticoDeTools.js.map +1 -1
  64. package/dist/agent/turno/informeDeTraza.js +27 -4
  65. package/dist/agent/turno/informeDeTraza.js.map +1 -1
  66. package/dist/agent/turno/puente.js +24 -1
  67. package/dist/agent/turno/puente.js.map +1 -1
  68. package/dist/agent/turno/resumenDeContexto.js +88 -4
  69. package/dist/agent/turno/resumenDeContexto.js.map +1 -1
  70. package/dist/agent/turno/resumenDeTool.js +18 -0
  71. package/dist/agent/turno/resumenDeTool.js.map +1 -1
  72. package/dist/agent/turno/rubrica.js +91 -0
  73. package/dist/agent/turno/rubrica.js.map +1 -0
  74. package/dist/agent/turno/turnoReal.js +172 -11
  75. package/dist/agent/turno/turnoReal.js.map +1 -1
  76. package/dist/cli/consola.js +63 -0
  77. package/dist/cli/consola.js.map +1 -1
  78. package/dist/cli/main.js +51 -4
  79. package/dist/cli/main.js.map +1 -1
  80. package/dist/cli/run.js +8 -0
  81. package/dist/cli/run.js.map +1 -1
  82. package/dist/core/agentes.js +111 -9
  83. package/dist/core/agentes.js.map +1 -1
  84. package/dist/core/esfuerzo.js +141 -0
  85. package/dist/core/esfuerzo.js.map +1 -0
  86. package/dist/core/estilos.js +78 -0
  87. package/dist/core/estilos.js.map +1 -0
  88. package/dist/core/exportacion.js +140 -0
  89. package/dist/core/exportacion.js.map +1 -0
  90. package/dist/core/hechosDelProyecto.js +87 -0
  91. package/dist/core/hechosDelProyecto.js.map +1 -0
  92. package/dist/core/logDeDispositivo.js +143 -0
  93. package/dist/core/logDeDispositivo.js.map +1 -0
  94. package/dist/core/modelos.js +32 -0
  95. package/dist/core/modelos.js.map +1 -1
  96. package/dist/core/mudanzaDeWorkspace.js +93 -0
  97. package/dist/core/mudanzaDeWorkspace.js.map +1 -0
  98. package/dist/core/planes.js +70 -0
  99. package/dist/core/planes.js.map +1 -0
  100. package/dist/core/ports.js +4 -0
  101. package/dist/core/ports.js.map +1 -1
  102. package/dist/core/rubrica.js +90 -0
  103. package/dist/core/rubrica.js.map +1 -0
  104. package/dist/core/selectorDeCarpeta.js +87 -0
  105. package/dist/core/selectorDeCarpeta.js.map +1 -0
  106. package/dist/core/settings.js +54 -5
  107. package/dist/core/settings.js.map +1 -1
  108. package/dist/core/shellDeAgente.js +45 -0
  109. package/dist/core/shellDeAgente.js.map +1 -1
  110. package/dist/core/topeAgotado.js +69 -0
  111. package/dist/core/topeAgotado.js.map +1 -0
  112. package/dist/web/servidor/arranque.js +324 -9
  113. package/dist/web/servidor/arranque.js.map +1 -1
  114. package/dist/web/servidor/sesiones.js +30 -2
  115. package/dist/web/servidor/sesiones.js.map +1 -1
  116. package/dist/web/servidor/transporte.js.map +1 -1
  117. package/dist/web/servidor/vestibulo.js +55 -6
  118. package/dist/web/servidor/vestibulo.js.map +1 -1
  119. package/package.json +2 -1
  120. package/skills/xone-hotswap/SKILL.md +31 -9
  121. package/skills/xone-hotswap/scripts/xone-arrancar-android +202 -0
  122. package/skills/xone-hotswap/scripts/xone-captura-android +93 -0
  123. package/skills/xone-hotswap/scripts/xone-desplegar-android +28 -0
  124. package/skills/xone-hotswap/scripts/xone-hotswap +39 -9
  125. package/skills/xone-hotswap/scripts/xone-reiniciar-android +28 -0
  126. package/skills/xone-plan-builder/SKILL.md +22 -4
  127. package/skills/xone-spec-builder/SKILL.md +37 -7
  128. package/apps/web/dist/assets/index-DBZTodio.js +0 -477
@@ -0,0 +1,87 @@
1
+ /**
2
+ * La carta de presentación del proyecto, pegada al turno.
3
+ *
4
+ * **Existe por una medida, y la medida es de hoy** (19-09-2026): en seis turnos reales sobre un
5
+ * proyecto de verdad, cada especialista repetía las MISMAS búsquedas —`grep` ×42 en un solo
6
+ * turno, con `xnTituloHeaderC` ×7 y `xnHeader` ×3— y el orquestador se llevaba entre el 38 % y
7
+ * el 50 % del gasto averiguando. No por delegar mal: porque **nadie hace el descubrimiento una
8
+ * sola vez**. El prompt del orquestador ya PIDE lo contrario («No pidas al siguiente
9
+ * especialista redescubrir esos hechos») y no basta — una instrucción no es una garantía.
10
+ *
11
+ * Así que los hechos baratos se ponen delante en vez de pedirse: el inventario cuesta cientos
12
+ * de tokens donde abrir los `.xne` cuesta decenas de miles (`xone_navegacion`).
13
+ *
14
+ * **Es el patrón de `conAdjuntos` y de `inventarioDelProyecto`**: montar no basta, hay que
15
+ * DECIR lo que hay. Aquí ni siquiera hay nada montado — el índice existe detrás de una tool
16
+ * que el agente tiene que acordarse de llamar, y un turno que no la llama trabaja a ciegas.
17
+ *
18
+ * **Y se calcula al MANDAR el turno, no al abrir la sesión.** Eso no es un detalle de
19
+ * cableado: `xone_navegacion` no cachea a propósito porque «un índice viejo que dice que un
20
+ * campo existe cuando el agente acaba de borrarlo es peor que no tener índice». Congelar esta
21
+ * foto en el prompt de sistema reintroduciría justo eso. Rehacerla por turno cuesta decenas de
22
+ * milisegundos y no puede quedarse vieja dentro del turno que la usa.
23
+ *
24
+ * Puro y en `core/`: quién lee el disco es de `agent/`.
25
+ */
26
+ /**
27
+ * Del índice a los hechos. PURA: el índice entra ya construido.
28
+ *
29
+ * Separada de quien lo construye por el motivo de siempre —poder probar la traducción sin
30
+ * disco— y porque el índice es la AUTORIDAD: aquí solo se elige qué poquito de él se adelanta.
31
+ * Lo que se elige son las cuatro cosas que un turno cualquiera pregunta primero, y ninguna
32
+ * lleva rutas: solo NOMBRES, así que esto no puede filtrar una ruta de la máquina por el cable.
33
+ */
34
+ export function hechosDeIndice(indice) {
35
+ const app = indice.app();
36
+ return {
37
+ entrada: app.entrada,
38
+ login: app.login,
39
+ estilos: app.estilos,
40
+ colecciones: indice.inventario().map((d) => d.nombre),
41
+ };
42
+ }
43
+ /**
44
+ * Cuántos nombres de colección caben antes de contar el resto.
45
+ *
46
+ * Un proyecto real medido tiene 98 colecciones y eso son unos cientos de tokens: barato al
47
+ * lado de los 18.000 que cuesta enterarse leyendo. El tope existe para que un proyecto mucho
48
+ * mayor no se coma la ventana, y **lo que no cabe se CUENTA** en vez de recortarse en
49
+ * silencio: una lista truncada sin decirlo se lee como la lista entera, y entonces el agente
50
+ * concluye que una colección no existe.
51
+ */
52
+ export const TOPE_DE_COLECCIONES = 150;
53
+ /** ¿Hay algo que contar? Sin esto no se pinta el bloque: un control sin dato detrás. */
54
+ function hayAlgo(h) {
55
+ return (h.colecciones.length > 0 || h.entrada.length > 0 || h.login.length > 0 || h.estilos.length > 0);
56
+ }
57
+ /** Una lista, o la marca de que no consta. Vacío NO es «no hay»: es que no se pudo leer. */
58
+ function lista(valores) {
59
+ return valores.length === 0 ? "no consta" : valores.join(", ");
60
+ }
61
+ /**
62
+ * La petición del turno con los hechos del proyecto detrás.
63
+ *
64
+ * Sin hechos —no hay índice, o el proyecto no se pudo leer— devuelve la petición TAL CUAL.
65
+ * Nombrar un inventario que no se tiene sería la mentira con forma de dato de siempre.
66
+ */
67
+ export function conHechosDelProyecto(peticion, hechos) {
68
+ if (hechos === undefined || !hayAlgo(hechos))
69
+ return peticion;
70
+ const visibles = hechos.colecciones.slice(0, TOPE_DE_COLECCIONES);
71
+ const ocultas = hechos.colecciones.length - visibles.length;
72
+ return [
73
+ peticion,
74
+ "",
75
+ `ESTE PROYECTO, medido ahora mismo (${hechos.colecciones.length} colecciones). No vuelvas a`,
76
+ "averiguar lo que ya está aquí, y pásalo en el `HANDOFF DE ANÁLISIS` cuando delegues:",
77
+ `- Entrada: ${lista(hechos.entrada)}`,
78
+ `- Login: ${lista(hechos.login)}`,
79
+ `- Estilos: ${lista(hechos.estilos)}`,
80
+ `- Colecciones: ${visibles.join(", ")}`,
81
+ ...(ocultas > 0 ? [` (y ${ocultas} más que no caben aquí: pídelas con \`xone_navegacion\`)`] : []),
82
+ "Esto es una FOTO del arranque del turno y solo dice QUÉ hay, no cómo es cada cosa. Para los",
83
+ "campos de una colección, dónde se declara algo o quién la referencia, usa `xone_navegacion`:",
84
+ "es la autoridad y está al día, esta lista no lo estará si el turno crea o borra algo.",
85
+ ].join("\n");
86
+ }
87
+ //# sourceMappingURL=hechosDelProyecto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hechosDelProyecto.js","sourceRoot":"","sources":["../../src/core/hechosDelProyecto.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAuBH;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,MAA0B;IACvD,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;IACzB,OAAO;QACL,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,WAAW,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;KACtD,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAEvC,wFAAwF;AACxF,SAAS,OAAO,CAAC,CAAoB;IACnC,OAAO,CACL,CAAC,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAC/F,CAAC;AACJ,CAAC;AAED,4FAA4F;AAC5F,SAAS,KAAK,CAAC,OAA0B;IACvC,OAAO,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAClC,QAAgB,EAChB,MAAqC;IAErC,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC9D,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC;IAClE,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;IAC5D,OAAO;QACL,QAAQ;QACR,EAAE;QACF,sCAAsC,MAAM,CAAC,WAAW,CAAC,MAAM,6BAA6B;QAC5F,sFAAsF;QACtF,cAAc,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;QACrC,YAAY,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;QACjC,cAAc,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;QACrC,kBAAkB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QACvC,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,OAAO,0DAA0D,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACnG,6FAA6F;QAC7F,8FAA8F;QAC9F,uFAAuF;KACxF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
@@ -0,0 +1,143 @@
1
+ /**
2
+ * El `code` con el que estos hallazgos entran en el bucle.
3
+ *
4
+ * Uno solo y no uno por mensaje: el `code` de un hallazgo del simulador es un identificador
5
+ * ESTABLE de familia (`REF_JS_COLL_MISSING`) y el texto va en `mensaje`. Aquí la familia es
6
+ * «lo que el aparato dijo al arrancar la app», y el mensaje es el que distingue.
7
+ */
8
+ export const ETIQUETA_DE_ARRANQUE = "DISPOSITIVO_ARRANQUE";
9
+ /**
10
+ * El prefijo de `adb logcat -v threadtime`: `MM-DD HH:MM:SS.mmm PID TID N `, donde `N` es
11
+ * el NIVEL.
12
+ *
13
+ * La fecha, el pid y el tid se van. El nivel se captura: lo pone quien escribió la línea, así
14
+ * que es la única clasificación de importancia que no es una opinión nuestra.
15
+ */
16
+ const PREFIJO = /^\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d+\s+\d+\s+\d+\s+([VDIWEF])\s+/;
17
+ /**
18
+ * Del nivel de logcat a la severidad del harness.
19
+ *
20
+ * `F` (fatal) y `E` son errores; `W` es aviso; `V`, `D` e `I` son información. **No se
21
+ * DESCARTA nada** —es la condición que gobierna este módulo— pero solo los errores entran en
22
+ * la huella, exactamente como en `turnoReal.ts#conVerificacion`: «un aviso que va y viene no
23
+ * dice nada de si el error se está arreglando».
24
+ *
25
+ * Y eso no es cosmética: MEDIDO contra el aparato, dos arranques seguidos de la misma app dan
26
+ * líneas `I` y `D` distintas —`Choreographer: Skipped 75 frames` contra `Skipped 33`,
27
+ * `Compiler allocated 5250KB`, ciclos del replicador que solo salen a veces—. Con ellas
28
+ * dentro, la huella cambiaba entre dos vueltas idénticas y la guarda de «no progreso» no
29
+ * habría cortado nunca.
30
+ */
31
+ const SEVERIDAD_DE_NIVEL = {
32
+ F: "error",
33
+ E: "error",
34
+ W: "warning",
35
+ I: "info",
36
+ D: "info",
37
+ V: "info",
38
+ };
39
+ /**
40
+ * El cuerpo de una traza de Java, que NO lleva nivel en cada línea.
41
+ *
42
+ * Se arrastra con la severidad de la línea que la encabeza: partir una excepción en un error
43
+ * y cuatro huérfanas dejaría fuera de la huella justo la parte que la identifica.
44
+ */
45
+ const CUERPO_DE_TRAZA = /^\s*(at [\w$.]+\(|Caused by:|\.{3} \d+ more)/;
46
+ /** La cabecera que pone `xone-log-android`, que no es una línea del log. */
47
+ const CABECERA = /^---/;
48
+ /**
49
+ * Lo que es de ANDROID y no de la app.
50
+ *
51
+ * Es una clave de ORDENACIÓN, nunca un descarte (ver la cabecera del módulo). Son las
52
+ * etiquetas que salieron en la medida real sin tener nada que ver con el proyecto: el
53
+ * cargador de clases, Firebase sin configurar, el renderizador, el gesto de «atrás», los
54
+ * avisos de reflexión del propio Android y el Chromium del WebView.
55
+ */
56
+ const DE_LA_PLATAFORMA = /\b(ziparchive|FirebaseApp|DynamiteModule|ProviderInstaller|HWUI|WindowOnBackDispatcher|chromium|ActivityThread|ApkAssets|OpenGLRenderer)\b|Accessing hidden (method|field)|Cleared Reference was only reachable/;
57
+ export function hallazgosDeLog(texto) {
58
+ const cuenta = new Map();
59
+ /** El nivel de la última línea con nivel, para las continuaciones de una traza. */
60
+ let nivelArrastrado = "I";
61
+ for (const linea of texto.split(/\r?\n/)) {
62
+ const l = linea.trimEnd();
63
+ if (l.trim() === "" || CABECERA.test(l))
64
+ continue;
65
+ const con = PREFIJO.exec(l);
66
+ if (con !== null)
67
+ nivelArrastrado = con[1];
68
+ else if (!CUERPO_DE_TRAZA.test(l))
69
+ nivelArrastrado = "I";
70
+ const mensaje = l.replace(PREFIJO, "").trim();
71
+ if (mensaje === "")
72
+ continue;
73
+ const previo = cuenta.get(mensaje);
74
+ if (previo === undefined) {
75
+ const deLaApp = !DE_LA_PLATAFORMA.test(mensaje);
76
+ cuenta.set(mensaje, {
77
+ mensaje,
78
+ veces: 1,
79
+ deLaApp,
80
+ /**
81
+ * **Lo de la plataforma nunca es ERROR, aunque el log diga `E`.** Un
82
+ * `E chromium: Seed missing signature` es un error de verdad — de Android, no de la
83
+ * app— y nadie lo arregla desde un `.xne`. Como error dejaría el bucle sin poder
84
+ * cerrar jamás. Se ve, con su severidad rebajada; no bloquea.
85
+ */
86
+ severidad: deLaApp
87
+ ? SEVERIDAD_DE_NIVEL[nivelArrastrado]
88
+ : SEVERIDAD_DE_NIVEL[nivelArrastrado] === "error"
89
+ ? "warning"
90
+ : SEVERIDAD_DE_NIVEL[nivelArrastrado],
91
+ });
92
+ }
93
+ else {
94
+ previo.veces += 1;
95
+ }
96
+ }
97
+ // Los de la app delante; dentro de cada grupo, los que más se repiten primero. El orden es
98
+ // ESTABLE (`Map` conserva la inserción y `sort` de V8 es estable), así que dos lecturas del
99
+ // mismo log dan la misma lista — que es media huella.
100
+ const peso = { error: 0, warning: 1, info: 2 };
101
+ const hallazgos = [...cuenta.values()].sort((a, b) => {
102
+ if (peso[a.severidad] !== peso[b.severidad])
103
+ return peso[a.severidad] - peso[b.severidad];
104
+ if (a.deLaApp !== b.deLaApp)
105
+ return a.deLaApp ? -1 : 1;
106
+ return b.veces - a.veces;
107
+ });
108
+ const plataforma = hallazgos.filter((h) => !h.deLaApp).length;
109
+ return {
110
+ hallazgos,
111
+ plataforma,
112
+ /**
113
+ * **Solo lo de la app es ERROR.** Un `Accessing hidden method` de Android entraría en la
114
+ * huella como error, y entonces el bucle se declararía rojo por algo que nadie puede
115
+ * arreglar desde un `.xne` — y no cerraría nunca. Va como `warning`: se ve, no bloquea.
116
+ *
117
+ * Sin `fichero` ni `linea`, y eso es honestidad: el log no los dice. Un fichero adivinado
118
+ * mandaría al agente a abrir el que no es.
119
+ */
120
+ aHallazgosDelTurno: () => hallazgos.map((h) => ({
121
+ code: ETIQUETA_DE_ARRANQUE,
122
+ severidad: h.severidad,
123
+ mensaje: h.veces === 1 ? h.mensaje : `${h.mensaje} (×${h.veces})`,
124
+ })),
125
+ };
126
+ }
127
+ /**
128
+ * La huella de una lectura, con el MISMO formato que la de `conVerificacion`
129
+ * (`code|fichero|linea`), para que las dos sean intercambiables en la misma guarda.
130
+ *
131
+ * Solo los de la app: un aviso de la plataforma que va y viene no dice nada de si el error se
132
+ * está arreglando — la misma razón por la que allí la huella son los ERRORES y no todos los
133
+ * hallazgos. El `mensaje` entra en la huella porque aquí el `code` es uno solo: sin él, dos
134
+ * excepciones distintas darían la misma huella y el bucle se creería atascado.
135
+ */
136
+ export function huellaDeHallazgos(hallazgos) {
137
+ return hallazgos
138
+ .filter((h) => h.severidad === "error")
139
+ .map((h) => `${ETIQUETA_DE_ARRANQUE}|${h.mensaje}|`)
140
+ .sort()
141
+ .join("\n");
142
+ }
143
+ //# sourceMappingURL=logDeDispositivo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logDeDispositivo.js","sourceRoot":"","sources":["../../src/core/logDeDispositivo.ts"],"names":[],"mappings":"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"}
@@ -327,4 +327,36 @@ export function pideThinkingAdaptativo(proveedor, modelo) {
327
327
  return false;
328
328
  return FAMILIAS_CON_ADAPTATIVO_A_MANO.some((prefijo) => modelo.startsWith(prefijo));
329
329
  }
330
+ /**
331
+ * ¿Este modelo ACEPTA que se le pida `thinking: {type:"adaptive"}`?
332
+ *
333
+ * Es la hermana de `pideThinkingAdaptativo` y contesta otra pregunta. Aquélla dice si hace
334
+ * falta pedirlo —o sea, si omitirlo significa «no pienses»—; ésta dice si se PUEDE pedir
335
+ * sin que sea un 400. Son distintas justo en la generación 5, que ya corre adaptativo por
336
+ * omisión: no hace falta pedírselo, pero admite que se le pida.
337
+ *
338
+ * Existe por un acoplamiento MEDIDO contra el validador del propio cliente
339
+ * (`@langchain/anthropic` 1.5.2, `validateInvocationParamCompatibility`): con un `effort`
340
+ * puesto, `claude-opus-5` RECHAZA la combinación si el `thinking` no va explícito —
341
+ * «thinking.type="disabled" is not supported for claude-opus-5 with
342
+ * outputConfig.effort="max"»—. O sea que pedir esfuerzo sin pedir razonamiento es una
343
+ * petición que ni sale de esta máquina. Y la recomendación de la casa va en la misma
344
+ * dirección: el esfuerzo se combina con el razonamiento adaptativo.
345
+ *
346
+ * **Opus 4.5 NO está**, aunque el validador local lo deje pasar: ese validador solo mira la
347
+ * forma, y el adaptativo llegó en 4.6 — mandárselo sería un 400 en el servidor, que es el
348
+ * único sitio donde ya no hay red que lo pare.
349
+ */
350
+ const FAMILIAS_QUE_ACEPTAN_ADAPTATIVO = [
351
+ ...FAMILIAS_CON_ADAPTATIVO_A_MANO,
352
+ "claude-opus-5",
353
+ "claude-sonnet-5",
354
+ "claude-fable",
355
+ "claude-mythos",
356
+ ];
357
+ export function aceptaThinkingAdaptativo(proveedor, modelo) {
358
+ if (proveedor !== "anthropic")
359
+ return false;
360
+ return FAMILIAS_QUE_ACEPTAN_ADAPTATIVO.some((prefijo) => modelo.startsWith(prefijo));
361
+ }
330
362
  //# sourceMappingURL=modelos.js.map
@@ -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":"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"}
@@ -0,0 +1,93 @@
1
+ import { posix } from "node:path";
2
+ import { rutaDeWorkspace } from "./settings.js";
3
+ /**
4
+ * El literal que vivía en MEDIO del reparto: `<base>/<entorno>/workspace/<proyecto>`.
5
+ *
6
+ * Vive aquí y no en `settings.ts` a propósito: `rutaDeWorkspace` ya no lo compone, y
7
+ * dejarlo allí sería una constante de producción que solo usa la mudanza. Cuando no quede
8
+ * nadie con el reparto viejo en disco, este fichero entero se va de una pieza.
9
+ */
10
+ export const CARPETA_DEL_REPARTO_VIEJO = "workspace";
11
+ /** Un segmento que no puede salirse de su carpeta ni inventar niveles. */
12
+ function esSegmentoLlano(valor) {
13
+ return valor !== "" && valor !== "." && valor !== ".." && !/[/\\]/.test(valor);
14
+ }
15
+ function normalizar(ruta) {
16
+ return posix.normalize(ruta).replace(/\/+$/, "");
17
+ }
18
+ /** ¿Son la misma ruta, o una es antepasada de la otra? Por SEGMENTOS, nunca por texto. */
19
+ function unaCuelgaDeLaOtra(a, b) {
20
+ const uno = normalizar(a).split("/");
21
+ const otro = normalizar(b).split("/");
22
+ const corto = uno.length <= otro.length ? uno : otro;
23
+ const largo = corto === uno ? otro : uno;
24
+ return corto.every((seg, i) => largo[i] === seg);
25
+ }
26
+ /**
27
+ * Qué copias locales siguen en el reparto viejo y adónde van.
28
+ *
29
+ * **Por PROYECTO y no por entorno.** Mover la carpeta `<entorno>/workspace` entera parece
30
+ * más barato, pero no vale en el caso de quien ya tenía `settings.workspace` configurado:
31
+ * ahí el destino (`<workspace>/<entorno>`) es el PADRE del origen, y la mudanza de una
32
+ * pieza sería mover una carpeta encima de sí misma. Proyecto a proyecto funciona en los
33
+ * dos casos con un solo camino.
34
+ *
35
+ * **Un destino que ya existe NUNCA se pisa**, y se cuenta aparte en `chocadas` en vez de
36
+ * callarse: en esa carpeta hay una historia de git, unas sesiones y un checkpoint, y dos
37
+ * copias del mismo proyecto sin que nadie lo diga son peor que una mudanza que no se hizo.
38
+ *
39
+ * Nada de esto toca el disco: quien llama decide, mueve y lo cuenta.
40
+ */
41
+ export function mudanzasPendientes(opciones) {
42
+ const mudanzas = [];
43
+ const chocadas = [];
44
+ for (const entorno of opciones.entornos) {
45
+ if (!esSegmentoLlano(entorno))
46
+ continue;
47
+ const vieja = posix.join(opciones.legado, entorno, CARPETA_DEL_REPARTO_VIEJO);
48
+ if (!opciones.existe(vieja))
49
+ continue;
50
+ for (const proyecto of opciones.listar(vieja)) {
51
+ if (!esSegmentoLlano(proyecto))
52
+ continue;
53
+ const desde = posix.join(vieja, proyecto);
54
+ const hacia = rutaDeWorkspace(opciones.workspace, entorno, proyecto);
55
+ // El degenerado: un proyecto que se llame «workspace» deja `desde` COLGANDO de
56
+ // `hacia` (`…/webstudio/workspace/workspace` → `…/webstudio/workspace`), o sea una
57
+ // carpeta que se muda encima de su propio padre. No es un choque —contarlo ahí diría
58
+ // que hay dos copias— : es que no hay nada que mudar.
59
+ if (unaCuelgaDeLaOtra(desde, hacia))
60
+ continue;
61
+ (opciones.existe(hacia) ? chocadas : mudanzas).push({ entorno, proyecto, desde, hacia });
62
+ }
63
+ }
64
+ return { mudanzas, chocadas };
65
+ }
66
+ /**
67
+ * Una ruta absoluta ya grabada en disco, traducida al reparto de ahora — o AUSENTE si esta
68
+ * mudanza no la toca.
69
+ *
70
+ * Existe porque hay dos almacenes con raíces absolutas escritas: `proyecto.raiz` del índice
71
+ * de tareas (`~/.xonecode/tareas/indice.json`) y las claves de `settings.sinAprobacion`. Sin
72
+ * reescribirlas, una tarea pendiente abriría una carpeta que ya no está y una autorización
73
+ * de escritura sin preguntar dejaría de aplicarse en silencio — que es la dirección segura,
74
+ * pero es un ajuste que el usuario dio por puesto.
75
+ *
76
+ * Se compara por SEGMENTOS y no por prefijo de texto, la misma trampa que `dentroDelWorkspace`:
77
+ * `…/AppDemoViejo` empieza por `…/AppDemo` y no tiene nada que ver. Y ausente significa «esto
78
+ * no lo mudé yo», que es distinto de «no cambia»: quien llama necesita saber si tocó la
79
+ * entrada para decidir si reescribe el fichero.
80
+ */
81
+ export function rutaMudada(ruta, mudanzas) {
82
+ const partes = normalizar(ruta).split("/");
83
+ for (const mudanza of mudanzas) {
84
+ const origen = normalizar(mudanza.desde).split("/");
85
+ if (partes.length < origen.length)
86
+ continue;
87
+ if (!origen.every((seg, i) => partes[i] === seg))
88
+ continue;
89
+ return posix.join(normalizar(mudanza.hacia), ...partes.slice(origen.length));
90
+ }
91
+ return undefined;
92
+ }
93
+ //# sourceMappingURL=mudanzaDeWorkspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mudanzaDeWorkspace.js","sourceRoot":"","sources":["../../src/core/mudanzaDeWorkspace.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Dónde viven los PLANES, y por qué no es ninguno de los dos sitios obvios.
3
+ *
4
+ * Un plan lo escribe quien analiza y lo consume quien desarrolla, que marca ahí mismo lo que
5
+ * va haciendo. O sea que no es un entregable que se enseña una vez: es **estado de trabajo
6
+ * compartido**. Eso descarta los dos sitios que se prueban primero:
7
+ *
8
+ * - **La raíz del proyecto NO**: es la app del cliente. Lo que se escribe ahí pasa por
9
+ * aprobación, entra en el commit de cada turno y **sube a CloudStudio**. Un plan de
10
+ * desarrollo no es parte de la aplicación que el cliente instala. (Y «pongo un `.gitignore`»
11
+ * tampoco resuelve: un `.gitignore` es un fichero DEL PROYECTO y subiría él mismo — la misma
12
+ * razón por la que la basura del SO va a `info/exclude` y nunca al `.gitignore`.)
13
+ * - **`/artefactos/` tampoco**, aunque ahí se probó primero y funciona: un artefacto es algo
14
+ * que se ENSEÑA —se anuncia con su evento, se abre en un iframe— y es PLANO, así que dos
15
+ * planes a la vez se pisan el nombre.
16
+ *
17
+ * Queda `.xonecode/planes/`, que es donde escribe el propio harness: está fuera del índice de
18
+ * git (`sacarXonecodeDelIndice`), fuera del diff del turno y fuera de la subida, y vive en el
19
+ * repo LOCAL, así que un plan sobrevive a la sesión que lo escribió — se planifica un día y se
20
+ * implementa otro.
21
+ *
22
+ * El agente lo ve por la ruta VIRTUAL `/planes/`, nunca por `.xonecode`, que le está denegado
23
+ * entero. Es el mismo truco que `/MEMORIA_PROYECTO.md`.
24
+ */
25
+ import { motivoDeNombreInaceptable } from "./agentes.js";
26
+ /** La ruta virtual. La barra final es obligatoria: `CompositeBackend` la retira al delegar. */
27
+ export const RUTA_PLANES = "/planes/";
28
+ /** Dónde caen de verdad, relativo a la raíz del proyecto. */
29
+ export const CARPETA_DE_PLANES = ".xonecode/planes";
30
+ /**
31
+ * **Un plan es una CARPETA, no un fichero**, porque dentro de una sesión puede haber varios y
32
+ * porque un plan son tres cosas que se acompañan (`PLAN.md`, `TASKS.md`, `CONTEXT.md`) más sus
33
+ * ADRs. Con ficheros sueltos, dos planes a la vez se pisan.
34
+ */
35
+ export const FICHEROS_DE_UN_PLAN = ["PLAN.md", "TASKS.md", "CONTEXT.md"];
36
+ /**
37
+ * Por qué un nombre de plan no vale, o `undefined` si vale.
38
+ *
39
+ * **La MISMA regla que la de un subagente o una skill**, y a propósito: el nombre se convierte
40
+ * en un segmento de ruta, y tres reglas distintas para lo mismo son tres sitios donde discrepar
41
+ * sobre qué es un nombre seguro.
42
+ */
43
+ export function motivoDePlanInaceptable(nombre) {
44
+ return motivoDeNombreInaceptable(nombre);
45
+ }
46
+ /**
47
+ * ¿Es una ruta de plan bien formada? Lista BLANCA de forma, no un `startsWith`.
48
+ *
49
+ * Tiene que ser `/planes/<slug>/<algo>`: con el slug validado y sin salirse por un `..`, un
50
+ * `\` ni una barra de más. Es la misma clase de criba que `esRutaDeArtefacto`, y existe por lo
51
+ * mismo: lo que el modelo escribe es texto, y de ahí sale una ruta del disco.
52
+ */
53
+ export function esRutaDePlan(ruta) {
54
+ if (ruta === undefined || !ruta.startsWith(RUTA_PLANES))
55
+ return false;
56
+ const resto = ruta.slice(RUTA_PLANES.length);
57
+ const partes = resto.split("/");
58
+ if (partes.length < 2)
59
+ return false;
60
+ const [plan, ...dentro] = partes;
61
+ if (plan === undefined || motivoDePlanInaceptable(plan) !== undefined)
62
+ return false;
63
+ // Ningún segmento vacío, ni `.`/`..`, ni nada con separadores raros o el byte nulo.
64
+ return dentro.every((s) => s !== "" && s !== "." && s !== ".." && !/[\\\0]/.test(s));
65
+ }
66
+ /** La carpeta de un plan, tal como la ve el agente. */
67
+ export function rutaDelPlan(nombre) {
68
+ return `${RUTA_PLANES}${nombre}/`;
69
+ }
70
+ //# sourceMappingURL=planes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planes.js","sourceRoot":"","sources":["../../src/core/planes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAEzD,+FAA+F;AAC/F,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CAAC;AAEtC,6DAA6D;AAC7D,MAAM,CAAC,MAAM,iBAAiB,GAAG,kBAAkB,CAAC;AAEpD;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,YAAY,CAAU,CAAC;AAElF;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAAc;IACpD,OAAO,yBAAyB,CAAC,MAAM,CAAC,CAAC;AAC3C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,IAAwB;IACnD,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,KAAK,CAAC;IACtE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACpC,MAAM,CAAC,IAAI,EAAE,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC;IACjC,IAAI,IAAI,KAAK,SAAS,IAAI,uBAAuB,CAAC,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACpF,oFAAoF;IACpF,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACvF,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,WAAW,CAAC,MAAc;IACxC,OAAO,GAAG,WAAW,GAAG,MAAM,GAAG,CAAC;AACpC,CAAC"}
@@ -249,6 +249,10 @@ export class CloudStudioEnMemoria {
249
249
  }
250
250
  async contexto() {
251
251
  this.exigirAbierto();
252
+ // Después de `exigirAbierto`: el fallo medido ocurre con el proyecto ABIERTO, y
253
+ // ponerlo antes convertiría este doble en otro camino para «no hay proyecto».
254
+ if (this.opciones.contextoFalla !== undefined)
255
+ throw new Error(this.opciones.contextoFalla);
252
256
  return { proyecto: this.abierto, rama: this.ramaActual };
253
257
  }
254
258
  async descargarZip() {
@@ -1 +1 @@
1
- {"version":3,"file":"ports.js","sourceRoot":"","sources":["../../src/core/ports.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ports.js","sourceRoot":"","sources":["../../src/core/ports.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * La rúbrica: qué significa «hecho» en ESTE encargo, y qué se hace cuando no lo está.
3
+ *
4
+ * Portado del `RubricMiddleware` de deepagents, que existe en su SDK de **Python** y no en el
5
+ * de JS. El diseño es suyo y es bueno: en la parada natural del agente —el modelo contesta sin
6
+ * pedir más tools— un CALIFICADOR juzga lo hecho contra unos criterios, y si dice que falta
7
+ * algo su comentario vuelve como mensaje y el bucle sigue, con tope de vueltas.
8
+ *
9
+ * ## Qué es esto y qué NO es
10
+ *
11
+ * **No sustituye al verificador** (`turnoReal.ts#conVerificacion`), lo complementa, y la
12
+ * frontera es lo que cada uno puede saber. El simulador contesta lo OBJETIVO —esto parsea, este
13
+ * atributo existe, este JavaScript no revienta— y por eso su veredicto se puede creer. Un
14
+ * calificador contesta lo que el simulador no ve: si el título se lee entero, si se hizo lo que
15
+ * se pidió, si se cambió algo que nadie pidió. Medido hoy: un especialista cambió
16
+ * `editable="false"` por `locked="true"` dentro de un arreglo visual, y ninguna comprobación
17
+ * estática tiene nada que decir de eso.
18
+ *
19
+ * **Y por eso un rojo suyo no es el rojo del verificador.** El del simulador es una medida; éste
20
+ * es la opinión de un modelo sobre un transcript. Se dice con esas palabras donde se enseñe.
21
+ *
22
+ * ## Dos cosas del original que NO se copian
23
+ *
24
+ * - **Terminar sin satisfacer no puede ser mudo.** Ellos documentan que con `failed`,
25
+ * `max_iterations_reached` o `grader_error` no tocan los mensajes, así que la última respuesta
26
+ * es la del modelo y quien llama tiene que ir a mirar un campo privado del estado. Eso es el
27
+ * mismo fallo que el tope de llamadas tenía aquí: trabajo que acaba a medias sin que nadie se
28
+ * entere. Aquí el estado no satisfecho SE DICE.
29
+ * - **El calificador entra por un PUERTO**, no como un modelo construido dentro. Así esto se
30
+ * prueba sin red ni clave, que es el invariante que sostiene el diseño de este repo.
31
+ *
32
+ * Puro: aquí está la política. Quién llama al modelo y quién monta el middleware es de `agent/`.
33
+ */
34
+ /** Un estado terminal cierra el bucle; `necesita-revision` es el único que lo continúa. */
35
+ export function esTerminal(estado) {
36
+ return estado !== "necesita-revision";
37
+ }
38
+ /**
39
+ * Cuántas vueltas se le dan.
40
+ *
41
+ * Tres es el valor del original. **Aquí importa más que allí**: cada vuelta puede traer
42
+ * escrituras, y cada escritura pasa por una aprobación — así que un tope alto no es solo gasto,
43
+ * son paradas delante de una persona. Y en una tarea de fondo no hay nadie que frene el bucle,
44
+ * que es el mismo argumento por el que existen `TOPE_REPARACIONES` y el tope de tandas.
45
+ */
46
+ export const TOPE_DE_VUELTAS = 3;
47
+ /**
48
+ * El mensaje con que vuelve el trabajo al agente.
49
+ *
50
+ * Va con voz del HARNESS y no del usuario: quien lo lee tiene que saber que esto no es alguien
51
+ * pidiendo otra cosa, es una comprobación diciendo que lo pedido no está. Si se disfrazara de
52
+ * petición nueva, el agente podría tomarlo por un cambio de encargo y empezar otra cosa.
53
+ *
54
+ * Y dice de qué vuelta va: sin eso, tres mensajes iguales seguidos se leen como un bucle y el
55
+ * modelo no sabe cuánto margen le queda.
56
+ */
57
+ export function mensajeDeRevision(comentario, vuelta, tope) {
58
+ return [
59
+ `[harness] Revisión ${vuelta} de ${tope}: lo que se pidió NO está hecho del todo.`,
60
+ "",
61
+ comentario.trim(),
62
+ "",
63
+ "Arregla eso y nada más. No es un encargo nuevo ni un cambio de opinión: es la misma tarea,",
64
+ "que todavía no cumple. Si crees que ya está y la revisión se equivoca, dilo y explica por qué",
65
+ "en vez de volver a cambiar lo mismo.",
66
+ ].join("\n");
67
+ }
68
+ /**
69
+ * Lo que se le dice a quien mira cuando el bucle acaba SIN satisfacer.
70
+ *
71
+ * Existe porque el original no lo tiene: allí el estado no satisfecho vive en un campo privado
72
+ * y la última respuesta sigue siendo la del modelo, que puede estar afirmando que terminó. Un
73
+ * trabajo que no cumple y lo dice como si cumpliera es peor que uno que falla.
74
+ */
75
+ export function avisoDeNoSatisfecho(estado, comentario) {
76
+ if (estado === "satisfecho" || estado === "necesita-revision")
77
+ return undefined;
78
+ const porQue = estado === "tope-de-vueltas"
79
+ ? `se agotaron las ${TOPE_DE_VUELTAS} revisiones y seguía sin cumplir`
80
+ : estado === "fallido"
81
+ ? "la rúbrica no se pudo evaluar contra este trabajo"
82
+ : "la revisión no llegó a dar veredicto (fallo del entorno, no del trabajo)";
83
+ const detalle = comentario?.trim();
84
+ return [
85
+ `⚠ revisión NO satisfecha: ${porQue}.`,
86
+ ...(detalle === undefined || detalle === "" ? [] : [` ${detalle}`]),
87
+ " Es la opinión de un modelo sobre lo hecho, no una medida como la del verificador.",
88
+ ].join("\n");
89
+ }
90
+ //# sourceMappingURL=rubrica.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rubrica.js","sourceRoot":"","sources":["../../src/core/rubrica.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAcH,2FAA2F;AAC3F,MAAM,UAAU,UAAU,CAAC,MAAuB;IAChD,OAAO,MAAM,KAAK,mBAAmB,CAAC;AACxC,CAAC;AAQD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC;AAEjC;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAAC,UAAkB,EAAE,MAAc,EAAE,IAAY;IAChF,OAAO;QACL,sBAAsB,MAAM,OAAO,IAAI,2CAA2C;QAClF,EAAE;QACF,UAAU,CAAC,IAAI,EAAE;QACjB,EAAE;QACF,4FAA4F;QAC5F,+FAA+F;QAC/F,sCAAsC;KACvC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAuB,EAAE,UAAmB;IAC9E,IAAI,MAAM,KAAK,YAAY,IAAI,MAAM,KAAK,mBAAmB;QAAE,OAAO,SAAS,CAAC;IAChF,MAAM,MAAM,GACV,MAAM,KAAK,iBAAiB;QAC1B,CAAC,CAAC,mBAAmB,eAAe,kCAAkC;QACtE,CAAC,CAAC,MAAM,KAAK,SAAS;YACpB,CAAC,CAAC,mDAAmD;YACrD,CAAC,CAAC,0EAA0E,CAAC;IACnF,MAAM,OAAO,GAAG,UAAU,EAAE,IAAI,EAAE,CAAC;IACnC,OAAO;QACL,6BAA6B,MAAM,GAAG;QACtC,GAAG,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;QACpE,qFAAqF;KACtF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}