chocolatito-code 1.6.6 → 1.6.8

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 (76) hide show
  1. package/README.md +437 -341
  2. package/dist/agent/context.d.ts +6 -0
  3. package/dist/agent/context.js +69 -2
  4. package/dist/agent/loop.js +8 -0
  5. package/dist/agent/toolGate.js +13 -7
  6. package/dist/agent/verifier.js +2 -1
  7. package/dist/config/permissions.d.ts +17 -0
  8. package/dist/config/permissions.js +47 -7
  9. package/dist/config/plataforma.d.ts +62 -0
  10. package/dist/config/plataforma.js +109 -0
  11. package/dist/config/updater.js +4 -1
  12. package/dist/hooks/manager.js +2 -1
  13. package/dist/index.js +164 -39
  14. package/dist/memory/manager.d.ts +15 -5
  15. package/dist/memory/manager.js +146 -29
  16. package/dist/servidor/captura.d.ts +36 -0
  17. package/dist/servidor/captura.js +74 -0
  18. package/dist/servidor/pagina.d.ts +27 -0
  19. package/dist/servidor/pagina.js +268 -0
  20. package/dist/servidor/puente.d.ts +34 -0
  21. package/dist/servidor/puente.js +115 -0
  22. package/dist/servidor/servidor.d.ts +61 -0
  23. package/dist/servidor/servidor.js +249 -0
  24. package/dist/sessions/manager.d.ts +8 -0
  25. package/dist/sessions/manager.js +44 -0
  26. package/dist/sessions/resume.d.ts +12 -0
  27. package/dist/sessions/resume.js +10 -0
  28. package/dist/tools/backgroundTask.d.ts +64 -0
  29. package/dist/tools/backgroundTask.js +264 -0
  30. package/dist/tools/browserExtension.d.ts +2 -1
  31. package/dist/tools/browserExtension.js +48 -0
  32. package/dist/tools/computerUse.js +51 -9
  33. package/dist/tools/definitions.js +93 -1
  34. package/dist/tools/gitAudit.d.ts +41 -0
  35. package/dist/tools/gitAudit.js +282 -0
  36. package/dist/tools/runCommand.js +5 -2
  37. package/dist/tools/runner.js +36 -2
  38. package/dist/tools/safety.d.ts +1 -0
  39. package/dist/tools/safety.js +3 -0
  40. package/dist/tools/todoTool.d.ts +2 -0
  41. package/dist/tools/todoTool.js +29 -0
  42. package/dist/tools/toolDefsComputer.js +9 -0
  43. package/dist/tools/win/hostScript.js +7 -2
  44. package/dist/ui/comandos.js +2 -0
  45. package/dist/ui/ink/App.d.ts +0 -23
  46. package/dist/ui/ink/App.js +86 -57
  47. package/dist/ui/ink/Prompt.d.ts +16 -6
  48. package/dist/ui/ink/Prompt.js +37 -62
  49. package/dist/ui/ink/montarApp.d.ts +34 -0
  50. package/dist/ui/ink/montarApp.js +93 -1
  51. package/dist/ui/ink/prestamo.d.ts +63 -0
  52. package/dist/ui/ink/prestamo.js +92 -0
  53. package/dist/ui/ink/teclado.d.ts +48 -0
  54. package/dist/ui/ink/teclado.js +96 -0
  55. package/dist/ui/ink/transcripcion.d.ts +114 -0
  56. package/dist/ui/ink/transcripcion.js +180 -0
  57. package/dist/ui/interrupt.js +4 -1
  58. package/dist/ui/loopPrompt.d.ts +6 -7
  59. package/dist/ui/loopPrompt.js +14 -1
  60. package/dist/ui/marco.d.ts +3 -0
  61. package/dist/ui/marco.js +22 -3
  62. package/dist/ui/pantalla.d.ts +45 -17
  63. package/dist/ui/pantalla.js +150 -92
  64. package/dist/ui/permissionPrompt.d.ts +19 -17
  65. package/dist/ui/permissionPrompt.js +44 -1
  66. package/dist/ui/pieFijo.d.ts +1 -1
  67. package/dist/ui/pieFijo.js +27 -5
  68. package/dist/ui/renderer.js +8 -0
  69. package/dist/ui/selector.d.ts +6 -4
  70. package/dist/ui/selector.js +14 -1
  71. package/extension/background.js +80 -0
  72. package/extension/content.js +106 -0
  73. package/extension/manifest.json +3 -2
  74. package/package.json +3 -2
  75. package/dist/ui/historial.d.ts +0 -49
  76. package/dist/ui/historial.js +0 -92
@@ -17,6 +17,103 @@
17
17
 
18
18
  const IS_TOP = window.top === window;
19
19
 
20
+ // ======================================================== telemetría de consola y errores de página
21
+ const MAX_CONSOLE_LOGS = 100;
22
+ const consoleLogsBuffer = [];
23
+
24
+ function addConsoleLog(level, message, stack, url) {
25
+ const entry = {
26
+ timestamp: Date.now(),
27
+ level: level === "warn" ? "warn" : "error",
28
+ message: String(message || ""),
29
+ };
30
+ if (stack) entry.stack = String(stack);
31
+ if (url) entry.url = String(url);
32
+
33
+ consoleLogsBuffer.push(entry);
34
+ if (consoleLogsBuffer.length > MAX_CONSOLE_LOGS) {
35
+ consoleLogsBuffer.shift();
36
+ }
37
+ }
38
+
39
+ try {
40
+ window.addEventListener("error", (event) => {
41
+ try {
42
+ const msg = event.message || (event.error && event.error.message) || String(event);
43
+ const stack = (event.error && event.error.stack) || undefined;
44
+ const url = event.filename || undefined;
45
+ addConsoleLog("error", msg, stack, url);
46
+ } catch (_) {}
47
+ });
48
+ } catch (_) {}
49
+
50
+ try {
51
+ window.addEventListener("unhandledrejection", (event) => {
52
+ try {
53
+ const reason = event.reason;
54
+ const msg =
55
+ (reason && (reason.message || (typeof reason === "object" ? JSON.stringify(reason) : String(reason)))) ||
56
+ "Unhandled Promise Rejection";
57
+ const stack = (reason && reason.stack) || undefined;
58
+ addConsoleLog("error", `Unhandled rejection: ${msg}`, stack);
59
+ } catch (_) {}
60
+ });
61
+ } catch (_) {}
62
+
63
+ try {
64
+ const originalConsoleError = console.error;
65
+ console.error = function (...args) {
66
+ try {
67
+ const msg = args
68
+ .map((a) => {
69
+ if (a instanceof Error) return a.message || String(a);
70
+ if (typeof a === "object" && a !== null) {
71
+ try {
72
+ return JSON.stringify(a);
73
+ } catch (_) {
74
+ return String(a);
75
+ }
76
+ }
77
+ return String(a);
78
+ })
79
+ .join(" ");
80
+ const errObj = args.find((a) => a instanceof Error);
81
+ const stack = errObj && errObj.stack ? errObj.stack : undefined;
82
+ addConsoleLog("error", msg, stack);
83
+ } catch (_) {}
84
+ if (typeof originalConsoleError === "function") {
85
+ originalConsoleError.apply(console, args);
86
+ }
87
+ };
88
+ } catch (_) {}
89
+
90
+ try {
91
+ const originalConsoleWarn = console.warn;
92
+ console.warn = function (...args) {
93
+ try {
94
+ const msg = args
95
+ .map((a) => {
96
+ if (a instanceof Error) return a.message || String(a);
97
+ if (typeof a === "object" && a !== null) {
98
+ try {
99
+ return JSON.stringify(a);
100
+ } catch (_) {
101
+ return String(a);
102
+ }
103
+ }
104
+ return String(a);
105
+ })
106
+ .join(" ");
107
+ const errObj = args.find((a) => a instanceof Error);
108
+ const stack = errObj && errObj.stack ? errObj.stack : undefined;
109
+ addConsoleLog("warn", msg, stack);
110
+ } catch (_) {}
111
+ if (typeof originalConsoleWarn === "function") {
112
+ originalConsoleWarn.apply(console, args);
113
+ }
114
+ };
115
+ } catch (_) {}
116
+
20
117
  // ======================================================== overlay visual y borde naranja (#D97757)
21
118
 
22
119
  let overlayHost = null;
@@ -916,6 +1013,15 @@
916
1013
  break;
917
1014
  }
918
1015
 
1016
+ case "getConsoleLogs": {
1017
+ const logs = [...consoleLogsBuffer];
1018
+ if (msg.clear === true) {
1019
+ consoleLogsBuffer.length = 0;
1020
+ }
1021
+ sendResponse({ ok: true, logs });
1022
+ break;
1023
+ }
1024
+
919
1025
  default:
920
1026
  sendResponse({ ok: false, error: "comando desconocido: " + (msg.cmd || msg.tipo) });
921
1027
  }
@@ -2,7 +2,7 @@
2
2
  "manifest_version": 3,
3
3
  "minimum_chrome_version": "102",
4
4
  "name": "Chocolatito Code",
5
- "version": "1.6.6",
5
+ "version": "1.6.8",
6
6
  "description": "Deja que Chocolatito Code trabaje dentro de tu Chrome, en segundo plano y con tus sesiones ya iniciadas.",
7
7
  "permissions": [
8
8
  "tabs",
@@ -11,7 +11,8 @@
11
11
  "debugger",
12
12
  "webNavigation",
13
13
  "storage",
14
- "downloads"
14
+ "downloads",
15
+ "webRequest"
15
16
  ],
16
17
  "host_permissions": [
17
18
  "<all_urls>"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "chocolatito-code",
3
- "version": "1.6.6",
3
+ "version": "1.6.8",
4
4
  "description": "Agente autónomo de programación para la terminal, con control real del ordenador y del navegador. Desarrollado por Chocolatito.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -21,7 +21,8 @@
21
21
  "os": [
22
22
  "win32",
23
23
  "darwin",
24
- "linux"
24
+ "linux",
25
+ "android"
25
26
  ],
26
27
  "scripts": {
27
28
  "build": "tsc",
@@ -1,49 +0,0 @@
1
- /**
2
- * LO QUE HA SALIDO POR PANTALLA, GUARDADO EN MEMORIA
3
- *
4
- * POR QUE HACE FALTA
5
- *
6
- * En la pantalla normal el historial lo lleva el terminal: sale una línea, se va
7
- * hacia arriba, y la rueda del ratón la recupera. Por eso la barra de abajo sube
8
- * con el scroll: es una línea más del historial, no una capa encima.
9
- *
10
- * En la pantalla alternativa —la que usan vim o htop— el terminal NO guarda
11
- * nada. A cambio, la barra se queda clavada de verdad. Pero si nadie recuerda lo
12
- * que salió, la conversación desaparece en cuanto pasa de una pantalla, que sería
13
- * mucho peor que el problema que se quiere resolver.
14
- *
15
- * Así que aquí se guarda. Es el precio de tener la barra fija: el historial deja
16
- * de ser del terminal y pasa a ser nuestro.
17
- *
18
- * POR QUE SE GUARDA POR LÍNEAS Y NO EL FLUJO CRUDO
19
- *
20
- * Lo que llega trae códigos de color y a veces medio renglón sin terminar. Para
21
- * poder pintar "las últimas N líneas" hay que saber dónde acaba cada una, así
22
- * que se parte por saltos y el resto sin terminar se queda esperando al suyo.
23
- * Los colores se conservan tal cual: recortarlos aquí sería pintar la
24
- * conversación en gris.
25
- */
26
- /** Añade lo que se acaba de escribir. Acepta trozos a medio renglón. */
27
- export declare function apuntar(texto: string): void;
28
- /**
29
- * Todas las líneas, con el resto sin terminar como última.
30
- *
31
- * Se incluye a propósito: mientras el modelo escribe una frase larga, el resto
32
- * ES lo que está saliendo. Ocultarlo hasta el salto haría que la respuesta
33
- * apareciera a tirones, un renglón entero de golpe.
34
- */
35
- export declare function todas(): string[];
36
- export declare function cuantas(): number;
37
- /** Se llama en cada escritura, para que quien pinte se entere. */
38
- export declare function alEscribir(cb: () => void): () => void;
39
- export declare function vaciar(): void;
40
- /**
41
- * La ventana visible: `alto` líneas terminando `desdeElFinal` por encima del
42
- * final.
43
- *
44
- * `desdeElFinal` es cuánto se ha subido con el scroll. Cero es el fondo, que es
45
- * donde se está mientras se trabaja.
46
- */
47
- export declare function ventana(alto: number, desdeElFinal?: number): string[];
48
- /** Cuánto se puede subir todavía. Sirve para no pasarse del principio. */
49
- export declare function tope(alto: number): number;
@@ -1,92 +0,0 @@
1
- /**
2
- * LO QUE HA SALIDO POR PANTALLA, GUARDADO EN MEMORIA
3
- *
4
- * POR QUE HACE FALTA
5
- *
6
- * En la pantalla normal el historial lo lleva el terminal: sale una línea, se va
7
- * hacia arriba, y la rueda del ratón la recupera. Por eso la barra de abajo sube
8
- * con el scroll: es una línea más del historial, no una capa encima.
9
- *
10
- * En la pantalla alternativa —la que usan vim o htop— el terminal NO guarda
11
- * nada. A cambio, la barra se queda clavada de verdad. Pero si nadie recuerda lo
12
- * que salió, la conversación desaparece en cuanto pasa de una pantalla, que sería
13
- * mucho peor que el problema que se quiere resolver.
14
- *
15
- * Así que aquí se guarda. Es el precio de tener la barra fija: el historial deja
16
- * de ser del terminal y pasa a ser nuestro.
17
- *
18
- * POR QUE SE GUARDA POR LÍNEAS Y NO EL FLUJO CRUDO
19
- *
20
- * Lo que llega trae códigos de color y a veces medio renglón sin terminar. Para
21
- * poder pintar "las últimas N líneas" hay que saber dónde acaba cada una, así
22
- * que se parte por saltos y el resto sin terminar se queda esperando al suyo.
23
- * Los colores se conservan tal cual: recortarlos aquí sería pintar la
24
- * conversación en gris.
25
- */
26
- /** Tope de líneas recordadas. Más allá, se olvidan las de arriba. */
27
- const MAXIMO = Number(process.env.CHOCOLATITO_HISTORIAL_LINEAS || 5000);
28
- let lineas = [];
29
- let resto = "";
30
- const oyentes = [];
31
- /** Añade lo que se acaba de escribir. Acepta trozos a medio renglón. */
32
- export function apuntar(texto) {
33
- if (!texto)
34
- return;
35
- const completo = resto + texto.replace(/\r\n/g, "\n");
36
- const partes = completo.split("\n");
37
- // El último trozo no lleva salto: todavía no es una línea terminada.
38
- resto = partes.pop() ?? "";
39
- for (const l of partes)
40
- lineas.push(l);
41
- if (lineas.length > MAXIMO)
42
- lineas = lineas.slice(lineas.length - MAXIMO);
43
- for (const cb of oyentes) {
44
- try {
45
- cb();
46
- }
47
- catch { }
48
- }
49
- }
50
- /**
51
- * Todas las líneas, con el resto sin terminar como última.
52
- *
53
- * Se incluye a propósito: mientras el modelo escribe una frase larga, el resto
54
- * ES lo que está saliendo. Ocultarlo hasta el salto haría que la respuesta
55
- * apareciera a tirones, un renglón entero de golpe.
56
- */
57
- export function todas() {
58
- return resto ? [...lineas, resto] : lineas;
59
- }
60
- export function cuantas() {
61
- return todas().length;
62
- }
63
- /** Se llama en cada escritura, para que quien pinte se entere. */
64
- export function alEscribir(cb) {
65
- oyentes.push(cb);
66
- return () => {
67
- const i = oyentes.indexOf(cb);
68
- if (i >= 0)
69
- oyentes.splice(i, 1);
70
- };
71
- }
72
- export function vaciar() {
73
- lineas = [];
74
- resto = "";
75
- }
76
- /**
77
- * La ventana visible: `alto` líneas terminando `desdeElFinal` por encima del
78
- * final.
79
- *
80
- * `desdeElFinal` es cuánto se ha subido con el scroll. Cero es el fondo, que es
81
- * donde se está mientras se trabaja.
82
- */
83
- export function ventana(alto, desdeElFinal = 0) {
84
- const todo = todas();
85
- const fin = Math.max(0, todo.length - Math.max(0, desdeElFinal));
86
- const inicio = Math.max(0, fin - Math.max(1, alto));
87
- return todo.slice(inicio, fin);
88
- }
89
- /** Cuánto se puede subir todavía. Sirve para no pasarse del principio. */
90
- export function tope(alto) {
91
- return Math.max(0, cuantas() - Math.max(1, alto));
92
- }