xonecode 0.13.0 → 0.15.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.
- package/apps/web/dist/assets/index-CBOJEbAY.css +1 -0
- package/apps/web/dist/assets/{index-a1EvXQj9.js → index-CNZQV957.js} +74 -74
- package/apps/web/dist/assets/{php-qXN69lAY.js → php-CdRBnJRh.js} +1 -1
- package/apps/web/dist/assets/{ruby-Cxx7RgZA.js → ruby-DRIeg398.js} +1 -1
- package/apps/web/dist/index.html +2 -2
- package/dist/agent/grafo/marcarCriteriosDelPlan.js +85 -0
- package/dist/agent/grafo/marcarCriteriosDelPlan.js.map +1 -0
- package/dist/agent/grafo/xoneAgent.js +4 -0
- package/dist/agent/grafo/xoneAgent.js.map +1 -1
- package/dist/agent/motores/trueforge/sesionTrueforge.js +3 -0
- package/dist/agent/motores/trueforge/sesionTrueforge.js.map +1 -1
- package/dist/agent/subagentes/agentesEnDisco.js +13 -4
- package/dist/agent/subagentes/agentesEnDisco.js.map +1 -1
- package/dist/core/tareasDelPlan.js +97 -5
- package/dist/core/tareasDelPlan.js.map +1 -1
- package/package.json +1 -1
- package/skills/xone-plan-builder/SKILL.md +7 -2
- package/apps/web/dist/assets/index-D8kdTP0Z.css +0 -1
|
@@ -16,8 +16,43 @@
|
|
|
16
16
|
* «en curso» o un «hecha» son palabras del plan, y traducirlas sería decidir por él.
|
|
17
17
|
* - Un fichero sin ninguna sección con forma de tarea no es un plan vacío: `tareas` va vacío y
|
|
18
18
|
* quien lo pinta enseña el texto entero.
|
|
19
|
+
* - La cabecera se reconoce también en la forma que el modelo escribe a veces fuera del formato,
|
|
20
|
+
* `## T1 — Título` (nivel 2, prefijo `T`): visto en un plan real que la pestaña pintaba como
|
|
21
|
+
* «sin tareas» con siete dentro. El número se conserva TAL CUAL (`T1`), porque es lo que
|
|
22
|
+
* citan sus «Bloqueada por». Con ese prefijo solo cuenta como dependencia un número que lo
|
|
23
|
+
* lleve: «T2 (resuelta la PENDIENTE 3)» es T2, no T2 y 3.
|
|
19
24
|
*/
|
|
20
|
-
|
|
25
|
+
/**
|
|
26
|
+
* Las cuatro palabras con que se escribe `**Estado:**` (`xone-plan-builder`, `TASKS-FORMAT.md`):
|
|
27
|
+
* quien desarrolla pone `implementada` al escribir el código y `hecha` cuando lo comprobó.
|
|
28
|
+
*/
|
|
29
|
+
export const ESTADOS_DE_TAREA = ["pendiente", "en curso", "implementada", "hecha"];
|
|
30
|
+
/**
|
|
31
|
+
* El estado del plan como una de las cuatro palabras, mirando solo cómo EMPIEZA: un plan real
|
|
32
|
+
* escribe «implementada — sin verificar en la app» o «pendiente — **NO hecha**», y lo que
|
|
33
|
+
* cuenta es la primera palabra, no la prosa de detrás (que tiene un «hecha» dentro).
|
|
34
|
+
*/
|
|
35
|
+
export function estadoReconocido(estado) {
|
|
36
|
+
if (estado === undefined)
|
|
37
|
+
return undefined;
|
|
38
|
+
const limpio = estado.replace(/[*_`]/g, "").trim().toLowerCase();
|
|
39
|
+
return ESTADOS_DE_TAREA.find((e) => limpio === e || new RegExp(`^${e}\\b`).test(limpio));
|
|
40
|
+
}
|
|
41
|
+
export function progresoDeTarea(estado, criterios) {
|
|
42
|
+
if (criterios.total > 0 && criterios.hechos === criterios.total)
|
|
43
|
+
return "finalizada";
|
|
44
|
+
const reconocido = estadoReconocido(estado);
|
|
45
|
+
if (reconocido === "hecha" && criterios.total === 0)
|
|
46
|
+
return "finalizada";
|
|
47
|
+
if (reconocido === "hecha" || reconocido === "implementada")
|
|
48
|
+
return "implementada";
|
|
49
|
+
if (reconocido === "en curso")
|
|
50
|
+
return "en-curso";
|
|
51
|
+
return "pendiente";
|
|
52
|
+
}
|
|
53
|
+
const CABECERA_DE_TAREA = /^#{2,3}\s+(T?\d{1,3})\s*[—–-]\s*(.+?)\s*$/;
|
|
54
|
+
/** «Ninguna …» o «nada»: la forma de decir que puede empezar ya. */
|
|
55
|
+
export const SIN_DEPENDENCIAS = /^(ninguna|nada)\b/i;
|
|
21
56
|
const ESTADO = /^\*\*Estado:\*\*\s*(.+?)\s*$/i;
|
|
22
57
|
const BLOQUEADA = /^\*\*Bloqueada por:\*\*\s*(.+?)\s*$/i;
|
|
23
58
|
const CASILLA = /^\s*[-*]\s+\[( |x|X)\]\s+/;
|
|
@@ -25,7 +60,9 @@ const CASILLA = /^\s*[-*]\s+\[( |x|X)\]\s+/;
|
|
|
25
60
|
* Los números de tarea que nombra una línea «Bloqueada por». Un rango `01–07` (con guion,
|
|
26
61
|
* raya o «a») se expande con el ancho del primero; «Ninguna» no nombra ninguno.
|
|
27
62
|
*/
|
|
28
|
-
export function dependenciasDe(linea) {
|
|
63
|
+
export function dependenciasDe(linea, conPrefijo = /\bT\d/.test(linea)) {
|
|
64
|
+
if (conPrefijo)
|
|
65
|
+
return dependenciasConPrefijo(linea);
|
|
29
66
|
const salida = [];
|
|
30
67
|
const rango = /\b(\d{1,3})\s*(?:[–—-]|\ba\b)\s*(\d{1,3})\b/g;
|
|
31
68
|
let resto = linea;
|
|
@@ -42,6 +79,22 @@ export function dependenciasDe(linea) {
|
|
|
42
79
|
salida.push(m[1]);
|
|
43
80
|
return [...new Set(salida)];
|
|
44
81
|
}
|
|
82
|
+
/** Las de un plan que numera `T1`, `T2`…: solo los números con prefijo, y `T1–T3` como rango. */
|
|
83
|
+
function dependenciasConPrefijo(linea) {
|
|
84
|
+
const salida = [];
|
|
85
|
+
let resto = linea;
|
|
86
|
+
for (const m of linea.matchAll(/\bT(\d{1,3})\s*(?:[–—-]|\ba\b)\s*T(\d{1,3})\b/g)) {
|
|
87
|
+
const desde = Number(m[1]);
|
|
88
|
+
const hasta = Number(m[2]);
|
|
89
|
+
if (hasta >= desde && hasta - desde < 100)
|
|
90
|
+
for (let n = desde; n <= hasta; n++)
|
|
91
|
+
salida.push(`T${n}`);
|
|
92
|
+
resto = resto.replace(m[0], " ");
|
|
93
|
+
}
|
|
94
|
+
for (const m of resto.matchAll(/\bT(\d{1,3})\b/g))
|
|
95
|
+
salida.push(`T${m[1]}`);
|
|
96
|
+
return [...new Set(salida)];
|
|
97
|
+
}
|
|
45
98
|
export function leerTareasDelPlan(texto) {
|
|
46
99
|
const lineas = texto.replace(/\r\n/g, "\n").split("\n");
|
|
47
100
|
const titulo = lineas.find((l) => /^#\s+/.test(l))?.replace(/^#\s+/, "").trim();
|
|
@@ -68,16 +121,18 @@ export function leerTareasDelPlan(texto) {
|
|
|
68
121
|
hechos++;
|
|
69
122
|
}
|
|
70
123
|
}
|
|
71
|
-
// «Ninguna …» es la forma del formato de decir que puede empezar ya: no nombra tareas aunque
|
|
124
|
+
// «Ninguna …» (o «nada») es la forma del formato de decir que puede empezar ya: no nombra tareas aunque
|
|
72
125
|
// la prosa de detrás lleve un número (una ruta, una línea de un fichero).
|
|
73
|
-
const nombra = bloqueadaPorTexto !== undefined &&
|
|
126
|
+
const nombra = bloqueadaPorTexto !== undefined && !SIN_DEPENDENCIAS.test(bloqueadaPorTexto);
|
|
74
127
|
tareas.push({
|
|
75
128
|
numero: actual.numero,
|
|
76
129
|
titulo: actual.titulo,
|
|
77
130
|
...(estado === undefined ? {} : { estado }),
|
|
78
|
-
|
|
131
|
+
// La numeración la fija la TAREA: en un plan de `T1`, «PENDIENTE 5» no es la tarea 5.
|
|
132
|
+
bloqueadaPor: nombra ? dependenciasDe(bloqueadaPorTexto, actual.numero.startsWith("T")) : [],
|
|
79
133
|
...(bloqueadaPorTexto === undefined ? {} : { bloqueadaPorTexto }),
|
|
80
134
|
criterios: { hechos, total },
|
|
135
|
+
progreso: progresoDeTarea(estado, { hechos, total }),
|
|
81
136
|
cuerpo: actual.lineas.join("\n").trim(),
|
|
82
137
|
});
|
|
83
138
|
actual = undefined;
|
|
@@ -100,4 +155,41 @@ export function leerTareasDelPlan(texto) {
|
|
|
100
155
|
cerrar();
|
|
101
156
|
return { ...(titulo === undefined || titulo === "" ? {} : { titulo }), tareas };
|
|
102
157
|
}
|
|
158
|
+
/**
|
|
159
|
+
* Marca como COMPROBADOS unos criterios de una tarea: cambia sus `- [ ]` a `- [x]`, contando las
|
|
160
|
+
* casillas de la sección de 1 en adelante, en el orden en que aparecen.
|
|
161
|
+
*
|
|
162
|
+
* Es lo que usa quien COMPRUEBA en el aparato (`marcar_criterios_del_plan`) y no puede escribir
|
|
163
|
+
* ficheros: por eso toca SOLO las casillas de UNA tarea, y nada más del fichero cambia. Un número
|
|
164
|
+
* que no existe se rechaza entero —marcar la mitad dejaría al modelo creyendo que marcó todo—.
|
|
165
|
+
*/
|
|
166
|
+
export function marcarCriterios(texto, numero, criterios) {
|
|
167
|
+
const saltos = texto.includes("\r\n") ? "\r\n" : "\n";
|
|
168
|
+
const lineas = texto.split(/\r?\n/);
|
|
169
|
+
const inicio = lineas.findIndex((l) => CABECERA_DE_TAREA.exec(l)?.[1] === numero);
|
|
170
|
+
if (inicio === -1)
|
|
171
|
+
return { error: `No hay ninguna tarea «${numero}» en el TASKS.md.` };
|
|
172
|
+
const casillas = [];
|
|
173
|
+
for (let i = inicio + 1; i < lineas.length && !/^##/.test(lineas[i]); i++) {
|
|
174
|
+
if (CASILLA.test(lineas[i]))
|
|
175
|
+
casillas.push(i);
|
|
176
|
+
}
|
|
177
|
+
const fuera = criterios.filter((n) => !Number.isInteger(n) || n < 1 || n > casillas.length);
|
|
178
|
+
if (fuera.length > 0) {
|
|
179
|
+
return { error: `La tarea ${numero} tiene ${casillas.length} criterio(s); no existe el ${fuera.join(", ")}.` };
|
|
180
|
+
}
|
|
181
|
+
const marcados = [];
|
|
182
|
+
const yaEstaban = [];
|
|
183
|
+
for (const n of [...new Set(criterios)].sort((a, b) => a - b)) {
|
|
184
|
+
const i = casillas[n - 1];
|
|
185
|
+
const c = CASILLA.exec(lineas[i]);
|
|
186
|
+
if (c[1] !== " ") {
|
|
187
|
+
yaEstaban.push(n);
|
|
188
|
+
continue;
|
|
189
|
+
}
|
|
190
|
+
lineas[i] = lineas[i].replace(/\[ \]/, "[x]");
|
|
191
|
+
marcados.push(n);
|
|
192
|
+
}
|
|
193
|
+
return { texto: lineas.join(saltos), marcados, yaEstaban };
|
|
194
|
+
}
|
|
103
195
|
//# sourceMappingURL=tareasDelPlan.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tareasDelPlan.js","sourceRoot":"","sources":["../../src/core/tareasDelPlan.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"tareasDelPlan.js","sourceRoot":"","sources":["../../src/core/tareasDelPlan.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -41,9 +41,14 @@ Si no existe `PLAN.md`, **detente y pide al usuario que ejecute `xone-spec-build
|
|
|
41
41
|
|
|
42
42
|
## El `TASKS.md` se ACTUALIZA, no se archiva
|
|
43
43
|
|
|
44
|
-
`**Estado:**`
|
|
44
|
+
`**Estado:**` EMPIEZA por una de cuatro palabras —`pendiente`, `en curso`, `implementada` (el
|
|
45
|
+
código está escrito) o `hecha` (y además comprobado)— y lo mantiene **quien ejecuta la tarea**, en
|
|
45
46
|
este mismo fichero y en esta misma carpeta. Las casillas de los criterios se marcan `- [x]`
|
|
46
|
-
cuando ese criterio está comprobado, no cuando se escribió el código que debería cumplirlo
|
|
47
|
+
cuando ese criterio está comprobado, no cuando se escribió el código que debería cumplirlo; lo
|
|
48
|
+
que se comprueba en el aparato lo marca `device-controller`. Una tarea está **finalizada** cuando
|
|
49
|
+
todas sus casillas están marcadas, y es lo que la pestaña Planes resume.
|
|
50
|
+
|
|
51
|
+
Cada tarea es una cabecera `### NN — Título` (no `## T1`), con sus casillas debajo.
|
|
47
52
|
|
|
48
53
|
Ésa es la razón de que el plan viva en `/planes/` y no entre los artefactos: no es un documento
|
|
49
54
|
que se entrega una vez, es el estado compartido entre quien planifica y quien desarrolla, a lo
|