@danieltmn/tamnora 0.20.0 → 0.20.1

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/CHANGELOG.md CHANGED
@@ -5,6 +5,20 @@ Todos los cambios relevantes de este proyecto se documentan en este archivo.
5
5
  El formato sigue [Keep a Changelog](https://keepachangelog.com/es-ES/1.1.0/)
6
6
  y el proyecto usa [Versionado Semantico](https://semver.org/lang/es/).
7
7
 
8
+ ## [0.20.1] - 2026-10-14
9
+
10
+ ### Cambiado
11
+
12
+ - **Resumen de compactación con formato**: `/compact` y la auto-compactación ahora
13
+ producen **markdown con secciones fijas** (`Estado`, `Decisiones`, `Archivos y
14
+ cambios`, `Hallazgos`, `Pendientes`) y la tarjeta lo **renderiza** (títulos y
15
+ bullets con estilo, sin `#`/`**` crudos).
16
+
17
+ ### Corregido
18
+
19
+ - **Consola**: al ejecutar un comando (`/…`) el input se **limpia de inmediato**,
20
+ sin quedar escrito mientras el comando tarda (p. ej. `compactar`).
21
+
8
22
  ## [0.20.0] - 2026-10-14
9
23
 
10
24
  ### Agregado
@@ -4,7 +4,12 @@
4
4
  import { estimateTokens } from './context.js';
5
5
 
6
6
  export const COMPACT_INSTRUCTION =
7
- 'Resumí la conversación en un texto conciso que preserve decisiones tomadas, archivos tocados, hallazgos y el estado actual, para poder continuar el trabajo sin el historial completo.';
7
+ 'Resumí la conversación para poder continuar el trabajo sin el historial completo. ' +
8
+ 'Devolvé SOLO markdown, en español, conciso, sin introducción ni cierre, usando estas secciones ' +
9
+ '(omití las que queden vacías): "## Estado" (dónde quedó el trabajo, en 1-3 frases), "## Decisiones", ' +
10
+ '"## Archivos y cambios" (un bullet por archivo, con la forma `path: qué cambió`), "## Hallazgos" ' +
11
+ '(causas, gotchas o descubrimientos relevantes) y "## Pendientes" (lo que falta o el próximo paso). ' +
12
+ 'Usá bullets "-" en las listas.';
8
13
 
9
14
  export const SUMMARY_INSTRUCTION =
10
15
  'Resumí la conversación para la persona: qué se pidió, qué se hizo, decisiones tomadas, archivos o comandos relevantes y el estado actual. Sé claro y conciso, en español, sin markdown pesado.';
@@ -1786,7 +1786,11 @@ function addCompactCard(container, { text, label = 'contexto compactado' } = {})
1786
1786
  const card = el('div', 'compact-card');
1787
1787
  card.append(el('div', 'compact-rule', label));
1788
1788
  const clean = String(text ?? '').trim();
1789
- if (clean) card.append(el('div', 'compact-text', clean));
1789
+ if (clean) {
1790
+ const body = el('div', 'compact-text text');
1791
+ body.innerHTML = renderMarkdown(clean);
1792
+ card.append(body);
1793
+ }
1790
1794
  container.appendChild(card);
1791
1795
  return card;
1792
1796
  }
@@ -2838,11 +2842,12 @@ async function sendMessage() {
2838
2842
  if (input.startsWith('/') && !images.length) {
2839
2843
  const name = input.slice(1).split(/\s+/)[0].toLowerCase();
2840
2844
  const arg = input.slice(1 + name.length).trim();
2845
+ // Limpiamos el input de una: hay comandos lentos (compactar, resumir) y no
2846
+ // queremos dejar el comando escrito mientras corren.
2847
+ chatInput.value = '';
2848
+ onChatInputChanged();
2841
2849
  const outcome = await runCommand(name, arg);
2842
- if (!outcome || outcome.handled) {
2843
- chatInput.value = '';
2844
- return;
2845
- }
2850
+ if (!outcome || outcome.handled) return;
2846
2851
  input = outcome.input ?? input;
2847
2852
  }
2848
2853
  if (!input && !images.length) return;
@@ -37,7 +37,7 @@
37
37
  </head>
38
38
  <body>
39
39
  <header class="topbar">
40
- <div class="brand"><span class="logo"><img src="/icons/logo.png" alt="Tamnora" /></span> <span id="topbar-section" class="topbar-section">chat</span> <span class="ver">v0.20.0</span></div>
40
+ <div class="brand"><span class="logo"><img src="/icons/logo.png" alt="Tamnora" /></span> <span id="topbar-section" class="topbar-section">chat</span> <span class="ver">v0.20.1</span></div>
41
41
  <nav class="tabs">
42
42
  <button class="tab active" data-tab="chat">chat</button>
43
43
  <button class="tab" data-tab="providers">proveedores</button>
@@ -2094,7 +2094,6 @@ dialog.modal::backdrop { background: rgba(24, 22, 16, 0.55); backdrop-filter: bl
2094
2094
  margin-top: 10px;
2095
2095
  padding-left: 12px;
2096
2096
  border-left: 2px dashed var(--border);
2097
- white-space: pre-wrap;
2098
2097
  word-break: break-word;
2099
2098
  color: var(--text);
2100
2099
  line-height: 1.5;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@danieltmn/tamnora",
3
- "version": "0.20.0",
3
+ "version": "0.20.1",
4
4
  "description": "Harness local para IAs: agente CLI-first con TUI, consola web y evaluacion. Node puro, sin dependencias.",
5
5
  "type": "module",
6
6
  "packageManager": "pnpm@11.25.0",