@tacuchi/agent-workflow-cli 10.5.0 → 11.0.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.
Files changed (37) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +5 -1
  3. package/dist/application/project-tab-data.d.ts +14 -0
  4. package/dist/application/project-tab-data.d.ts.map +1 -1
  5. package/dist/application/project-tab-data.js +29 -3
  6. package/dist/application/project-tab-data.js.map +1 -1
  7. package/package.json +2 -2
  8. package/skills/agent-workflow/LICENSE +661 -21
  9. package/skills/agent-workflow/README.md +2 -2
  10. package/skills/agent-workflow/doctrine/session/SKILL.md +2 -1
  11. package/skills/agent-workflow/specialties/analyze-conclude/SKILL.md +8 -2
  12. package/skills/agent-workflow/workflows/analyze-workflow/SKILL.md +12 -2
  13. package/dist/cli/tui/components/command-palette.d.ts +0 -18
  14. package/dist/cli/tui/components/command-palette.d.ts.map +0 -1
  15. package/dist/cli/tui/components/command-palette.js +0 -23
  16. package/dist/cli/tui/components/command-palette.js.map +0 -1
  17. package/dist/cli/tui/components/sidebar.d.ts +0 -27
  18. package/dist/cli/tui/components/sidebar.d.ts.map +0 -1
  19. package/dist/cli/tui/components/sidebar.js +0 -37
  20. package/dist/cli/tui/components/sidebar.js.map +0 -1
  21. package/dist/cli/tui/components/toast-stack.d.ts +0 -41
  22. package/dist/cli/tui/components/toast-stack.d.ts.map +0 -1
  23. package/dist/cli/tui/components/toast-stack.js +0 -61
  24. package/dist/cli/tui/components/toast-stack.js.map +0 -1
  25. package/dist/cli/tui/components/toast.d.ts +0 -7
  26. package/dist/cli/tui/components/toast.d.ts.map +0 -1
  27. package/dist/cli/tui/components/toast.js +0 -17
  28. package/dist/cli/tui/components/toast.js.map +0 -1
  29. package/skills/agent-workflow/doctrine/doctor/SKILL.md.tmp +0 -0
  30. package/skills/agent-workflow/doctrine/hub-init/SKILL.md.tmp +0 -0
  31. package/skills/agent-workflow/doctrine/migrate/SKILL.md.tmp +0 -0
  32. package/skills/agent-workflow/doctrine/project-init/SKILL.md.tmp +0 -0
  33. package/skills/agent-workflow/doctrine/rules/SKILL.md.tmp +0 -0
  34. package/skills/agent-workflow/exports/export-arq/SKILL.md.tmp +0 -0
  35. package/skills/agent-workflow/exports/export-report/SKILL.md.tmp +0 -0
  36. package/skills/agent-workflow/specialties/analyze-investigate/SKILL.md.tmp +0 -0
  37. package/skills/agent-workflow/standards/coding-standards/SKILL.md.tmp +0 -0
@@ -36,7 +36,7 @@ agent-workflow self install-skill --from /path/to/agent-workflow-cli/skills/agen
36
36
  skills/agent-workflow/
37
37
  ├── SKILL.md # Skill entry point with frontmatter
38
38
  ├── README.md # This file
39
- ├── LICENSE # MIT
39
+ ├── LICENSE # AGPL-3.0-or-later
40
40
  └── references/ # Per-family command documentation
41
41
  ├── session-mgmt.md # sessions, session-create, session-resume, session-close, session-artifacts
42
42
  ├── objetivo-tasks.md # objetivo-data, tasks-data, decisiones-list, dependencias-list
@@ -71,4 +71,4 @@ rm -rf ~/.claude/skills/agent-workflow
71
71
 
72
72
  ## License
73
73
 
74
- MIT — see [LICENSE](./LICENSE).
74
+ Copyright © 2026 Jesús Loayza (Tacuchi). Licensed under **AGPL-3.0-or-later** — see [LICENSE](./LICENSE).
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: session
3
3
  description: Lifecycle universal de sesiones agent-workflow en 4 fases (planning/execution/validation/closure). Crea, retoma, lista o cierra sesiones componiendo skills de especialidad según el flow elegido (dev/design/analyze). Auto-plan antes de editar código. Topic-change detection en execution. Closure propone commits por fuente afectada (propose-then-execute). Invocado solo vía /agent-workflow:session.
4
- version: 4.3.0
4
+ version: 4.4.0
5
5
  ---
6
6
 
7
7
  # Session — Lifecycle universal agent-workflow v3.0
@@ -455,6 +455,7 @@ agent-workflow sessions [--include-legacy]
455
455
  - **AW-PROJECT obligatorio**: si falta, proponer project-init/hub-init.
456
456
  - **Fuentes globales**: el proyecto las declara una vez; las sesiones sólo indican ramas.
457
457
  - **BD: scripts versionados, no ejecución directa**. MCP `<mcp-cert>`/`<mcp-prod>` son read-only por contrato (SELECT, EXPLAIN, `\d`). Cualquier mutación (INSERT/UPDATE/DELETE/DDL) se materializa como script en `docs/scripts/` del workspace de la fuente; el AI nunca ejecuta el script — el usuario lo aplica manualmente y confirma post-ejecución antes de cerrar la tarea. Excepción única: el usuario explícitamente delega ejecución por bloque.
458
+ - **Moderación en analyze (anti sobre-análisis)**: en flow=analyze el output escala con el scope que el stakeholder pidió, no con la madurez del hub. No inventar decisiones/riesgos no planteados, asumir la infra existente como disponible, y proponer máx 1 sesión dev derivada por default. Canon: `analyze-workflow` §"Moderación" + `analyze-conclude` (modality=technical).
458
459
  - **No tocar sesiones de otro flow** sin pedir cambio de plugin/comando.
459
460
 
460
461
  ## Recursos adicionales
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: analyze-conclude
3
3
  description: "Produce CONCLUSIONS.md como cierre del análisis para las 3 modalidades (technical/incident/data). Una sola estructura: summary + conclusions con evidencia + recommendations con responsable + traceability. Vive en la sesión, no se gradúa por defecto. Invocado al final de execution en sesiones analyze cuando ya existe FINDINGS.md. Reemplaza a analyze-rfc, analyze-data y analyze-postmortem."
4
- version: 2.1.0
4
+ version: 2.2.0
5
5
  ---
6
6
 
7
7
  # analyze-conclude — qtc v2.1+
@@ -77,10 +77,16 @@ La estructura es única. Lo que cambia es el peso y el contenido de cada secció
77
77
  - **Open**: dependencias externas, decisiones que dependen de otra sesión.
78
78
 
79
79
  Reglas específicas:
80
- - **3 opciones es óptimo**: si el espacio es claro, 2 alcanza. Si hay ambigüedad alta, hasta 4. Más es ruido.
80
+ - **Moderación primero (anti sobre-análisis)**: antes de enumerar opciones, decisiones o riesgos, validá contra el OBJECTIVE literal y el material adjunto:
81
+ - ¿El stakeholder pidió esta decisión? Si no aparece en `OBJECTIVE.question` ni en las referencias, **no la inventes** — omitila.
82
+ - ¿La infraestructura ya existe en el repo (GCP, colas, motor de decisiones, generación/envío de documentos, auth, etc.)? **Asumila disponible** y no la rediscutas como si fuera greenfield. El análisis compone sobre lo existente; no re-decide lo ya provisto.
83
+ - ¿El "riesgo" bloquea realmente el dev, o es especulación (vector OSINT teórico, duplicidad hipotética)? Si no bloquea, **omitilo**.
84
+ - Si el scope es claro sobre un stack maduro: una CONCLUSIONS de **≤1 página con 1 recomendación** basta. No fuerces secciones cuando no hay una decisión real que tomar.
85
+ - **Opciones solo si hay decisión genuina**: cuando el stakeholder sí planteó una decisión abierta, 3 opciones es óptimo (2 si el espacio es claro, hasta 4 si la ambigüedad es alta; más es ruido). Si **no** hay decisión pedida, no fabriques un set de opciones — describí la composición sobre lo existente y pasá directo a la recomendación.
81
86
  - **Tradeoffs explícitos**: nunca "ventaja: bueno". Cada Pro/Con específico.
82
87
  - **Costo estimado obligatorio**: S/M/L de implementación.
83
88
  - **Decisión recomendada con justificación**: no presentar opciones sin elegir. Si genuinamente no hay una mejor, declararlo y describir cómo decidir (ej. "depende de tolerancia a downtime: A si 0, B si <1h").
89
+ - **Máximo 1 sesión dev derivada**: la recomendación propone **una** sesión dev de handoff por default. Solo proponé múltiples si el stakeholder lo pidió explícitamente o si hay una dependencia técnica dura que las separa (declarala).
84
90
 
85
91
  ### Modality: incident (post-mortem tradicional)
86
92
 
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: analyze-workflow
3
3
  description: Workflow especializado analyze (especialidad investigación read-only), antes en qtc-analyze. Consumido por /agent-workflow:session cuando flow=analyze para orquestar el lifecycle universal con composición analyze-específica según modalidad.
4
- version: 2.1.0
4
+ version: 2.2.0
5
5
  flow: analyze
6
6
  workflow_schema: 1.0
7
7
  ---
@@ -35,12 +35,22 @@ Skills disponibles:
35
35
  - **analyze-conclude**: cierre del análisis con `CONCLUSIONS.md` modulado por `## Modality` (technical/incident/data). Una sola skill, una sola estructura.
36
36
 
37
37
  Diferencia clave de **modalidad** (embebida como `## Modality` en CONCLUSIONS.md):
38
- - `technical` (legacy: `tecnica`): pregunta arquitectónica/diseño → cuerpo modulado como propuesta (opciones consideradas + decisión recomendada).
38
+ - `technical` (legacy: `tecnica`): pregunta arquitectónica/diseño → cuerpo modulado como propuesta (opciones consideradas + decisión recomendada). **Solo cuando hay una decisión genuina que el stakeholder planteó**; si el scope es claro sobre un stack maduro, una recomendación acotada basta (ver "Moderación" abajo).
39
39
  - `data` (legacy: `datos`): análisis cuantitativo → cuerpo modulado como informe (hallazgos numéricos + interpretación + acciones sugeridas).
40
40
  - `incident` (legacy: `incidente`): post-mortem retrospectivo → cuerpo modulado con timeline + causa raíz + impacto + acciones preventivas.
41
41
 
42
42
  CONCLUSIONS.md vive en la sesión por default. Gradúa opt-in con `kind=conclusion` a `docs/conclusiones/`.
43
43
 
44
+ ## Moderación — anti sobre-análisis (hub maduro / requerimiento simple)
45
+
46
+ Regla transversal del flow=analyze, crítica en `modality=technical` sobre hubs con stack ya provisionado (GCP, colas, motores de decisión, generación/envío de documentos, auth). Un análisis de calidad **no** equivale a un documento extenso: equivale a uno **proporcional al scope que el stakeholder pidió**. El output debe escalar con el requerimiento, no con la madurez del hub.
47
+
48
+ - **No inventes decisiones ni riesgos**. Antes de listar una "decisión a tomar" o un "riesgo cross-repo", validá contra `OBJECTIVE.question` literal y el material adjunto. Si el stakeholder no lo planteó y no bloquea el dev, **omitilo**. Detalle operativo en `analyze-conclude` (modality=technical → "Moderación primero").
49
+ - **Hub maduro ≠ greenfield**. Si la infraestructura ya existe en el repo, asumila disponible y describí cómo el dev **compone** sobre lo existente. No re-decidas piezas ya provistas como si arrancaran de cero.
50
+ - **Agencia ≠ completitud**. Cuando el usuario delega ("según lo veas conveniente"), eso habilita pasar **directo** a una sesión dev si el scope es claro — no obliga a producir un análisis robusto. La opción más liviana que cubre el requerimiento gana.
51
+ - **Máximo 1 sesión dev derivada** por default. Proponé varias solo si el stakeholder lo pidió explícitamente o hay una dependencia técnica dura que las separa (declarala).
52
+ - **Artefactos canónicos únicos**: el flow=analyze produce `EVIDENCE.md` → `FINDINGS.md` → `CONCLUSIONS.md` (+ `queries/` si aplica). Los mapeos por-repo (despacho de subagentes en hub mode) son **evidencia** y viven como tal. No eleves un `CONSOLIDADO.md`/`MAPEO-*.md` inventado al rango de artefacto canónico ni dupliques en él lo que ya va en FINDINGS/CONCLUSIONS. La consolidación cross-repo vive en `FINDINGS.md` (Patterns) y cierra en una `CONCLUSIONS.md` acotada (≤1 página si el scope es simple).
53
+
44
54
  ## Standalone (use) — DEPRECADO (session096)
45
55
 
46
56
  > `/agent-workflow:use` nunca se materializó como comando. Para investigación read-only con trazabilidad usá `/agent-workflow:session --flow analyze`. El micro-lifecycle `/agent-workflow:patch` es para tareas dev con cambio (no aplica a investigación). Esta sección queda como histórico read-only; no describe un comando activo.
@@ -1,18 +0,0 @@
1
- export interface PaletteCommand {
2
- id: string;
3
- label: string;
4
- category: string;
5
- hint?: string;
6
- alert?: boolean;
7
- }
8
- export interface CommandPaletteProps {
9
- filter: string;
10
- commands: PaletteCommand[];
11
- cursor: number;
12
- groups?: Array<{
13
- category: string;
14
- commands: PaletteCommand[];
15
- }>;
16
- }
17
- export declare function CommandPalette({ filter, commands, cursor }: CommandPaletteProps): import("react/jsx-runtime").JSX.Element;
18
- //# sourceMappingURL=command-palette.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"command-palette.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/components/command-palette.tsx"],"names":[],"mappings":"AAGA,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,cAAc,EAAE,CAAA;KAAE,CAAC,CAAC;CAClE;AAID,wBAAgB,cAAc,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,mBAAmB,2CA6E/E"}
@@ -1,23 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Box, Text } from "ink";
3
- import { colors, icons } from "../theme.js";
4
- const PLACEHOLDER = "type to filter…";
5
- export function CommandPalette({ filter, commands, cursor }) {
6
- const groups = [];
7
- for (const c of commands) {
8
- const last = groups[groups.length - 1];
9
- if (last && last.category === c.category) {
10
- last.rows.push(c);
11
- }
12
- else {
13
- groups.push({ category: c.category, rows: [c] });
14
- }
15
- }
16
- let runningIdx = 0;
17
- return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { flexDirection: "row", marginBottom: 1, children: [_jsx(Text, { color: colors.mute, children: "search " }), _jsxs(Text, { color: colors.accent, bold: true, children: ["\u203A", " "] }), filter ? (_jsx(Text, { color: colors.bright, children: filter })) : (_jsx(Text, { color: colors.faint, children: PLACEHOLDER })), _jsx(Text, { color: colors.accent, children: icons.caret }), _jsx(Box, { flexGrow: 1 }), _jsxs(Text, { color: colors.mute, children: [commands.length, " match", commands.length === 1 ? "" : "es"] })] }), _jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: colors.borderFaint, children: "─".repeat(70) }) }), commands.length === 0 ? (_jsxs(Text, { color: colors.dim, children: ["No matches for \"", filter || "…", "\"."] })) : null, groups.map((g) => (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsx(Text, { color: colors.mute, children: g.category.toUpperCase() }), g.rows.map((c) => {
18
- const idx = runningIdx++;
19
- const active = idx === cursor;
20
- return (_jsxs(Box, { flexDirection: "row", children: [_jsx(Box, { width: 2, children: _jsx(Text, { color: active ? colors.accent : colors.faint, children: active ? icons.focusBar : " " }) }), _jsx(Box, { flexGrow: 1, children: _jsx(Text, { color: active ? colors.accent : colors.bright, bold: active, children: c.label }) }), c.hint ? (_jsx(Box, { marginLeft: 1, children: _jsx(Text, { color: colors.dim, children: c.hint }) })) : null, c.alert ? (_jsx(Box, { marginLeft: 1, children: _jsx(Text, { color: colors.err, children: "\u25CF" }) })) : null] }, c.id));
21
- })] }, g.category)))] }));
22
- }
23
- //# sourceMappingURL=command-palette.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"command-palette.js","sourceRoot":"","sources":["../../../../src/cli/tui/components/command-palette.tsx"],"names":[],"mappings":"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"}
@@ -1,27 +0,0 @@
1
- export type SidebarTabId = "status" | "workflow" | "project" | "mcp" | "skills";
2
- export interface SidebarTab {
3
- id: SidebarTabId;
4
- key: string;
5
- label: string;
6
- badge?: string;
7
- alert?: boolean;
8
- }
9
- export interface WorkspaceContext {
10
- modeLabel: string;
11
- branchLabel: string;
12
- sessionsLabel: string;
13
- }
14
- export interface KeymapEntry {
15
- key: string;
16
- action: string;
17
- }
18
- export interface SidebarProps {
19
- activeTab: SidebarTabId;
20
- tabs: SidebarTab[];
21
- workspaceContext: WorkspaceContext;
22
- cliVersion: string;
23
- globalKeys: KeymapEntry[];
24
- width?: number;
25
- }
26
- export declare function Sidebar({ activeTab, tabs, workspaceContext, cliVersion, globalKeys, width, }: SidebarProps): import("react/jsx-runtime").JSX.Element;
27
- //# sourceMappingURL=sidebar.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sidebar.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/components/sidebar.tsx"],"names":[],"mappings":"AAGA,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,KAAK,GAAG,QAAQ,CAAC;AAEhF,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,YAAY,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,YAAY,CAAC;IACxB,IAAI,EAAE,UAAU,EAAE,CAAC;IACnB,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,WAAW,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAOD,wBAAgB,OAAO,CAAC,EACtB,SAAS,EACT,IAAI,EACJ,gBAAgB,EAChB,UAAU,EACV,UAAU,EACV,KAAqB,GACtB,EAAE,YAAY,2CAiEd"}
@@ -1,37 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { Box, Text } from "ink";
3
- import { colors, icons } from "../theme.js";
4
- const DEFAULT_WIDTH = 24;
5
- // Reservado para alinear los `entry.action` en la columna de keymap. 3 cells es
6
- // suficiente para los keys más anchos (`↑↓`, `^K`).
7
- const KEY_COL_WIDTH = 4;
8
- export function Sidebar({ activeTab, tabs, workspaceContext, cliVersion, globalKeys, width = DEFAULT_WIDTH, }) {
9
- return (_jsxs(Box, { flexDirection: "column", width: width, flexShrink: 0, paddingX: 1, paddingY: 1, children: [_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { wrap: "truncate-end", children: [_jsx(Text, { color: colors.accent, bold: true, children: icons.brand }), _jsxs(Text, { color: colors.bright, bold: true, children: [" ", "agent-workflow"] })] }), _jsxs(Text, { color: colors.faint, wrap: "truncate-end", children: ["v", cliVersion, " \u00B7 @tacuchi"] })] }), _jsx(Box, { marginTop: 1, children: _jsx(Divider, {}) }), _jsx(Box, { marginTop: 1, flexDirection: "column", children: tabs.map((tab) => (_jsx(SidebarTabRow, { tab: tab, active: tab.id === activeTab }, tab.id))) }), _jsx(Box, { marginTop: 1, children: _jsx(Divider, {}) }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { color: colors.mute, children: "WORKSPACE" }), _jsx(Text, { color: colors.text, wrap: "truncate-end", children: workspaceContext.modeLabel }), _jsx(Text, { color: colors.dim, wrap: "truncate-end", children: workspaceContext.branchLabel }), _jsx(Text, { color: colors.dim, wrap: "truncate-end", children: workspaceContext.sessionsLabel })] }), _jsx(Box, { marginTop: 1, children: _jsx(Divider, {}) }), _jsx(Box, { marginTop: 1, flexDirection: "column", children: globalKeys.map((entry) => (_jsxs(Box, { children: [_jsx(Box, { width: KEY_COL_WIDTH, children: _jsx(Text, { color: colors.accent, children: entry.key }) }), _jsx(Text, { color: colors.dim, children: entry.action })] }, `${entry.key}-${entry.action}`))) })] }));
10
- }
11
- // Width interior del sidebar: width - paddingX*2 = 22, menos 2 cells de safety
12
- // margin para variabilidad de ancho visual de glyphs + inner padding.
13
- const SIDEBAR_INNER_WIDTH = DEFAULT_WIDTH - 4;
14
- const SIDEBAR_INNER_PAD = 1;
15
- function SidebarTabRow({ tab, active }) {
16
- const focusGlyph = active ? icons.focusBar : " ";
17
- const bg = active ? colors.bgHighlight : undefined;
18
- const bgProp = bg ? { backgroundColor: bg } : {};
19
- const innerPad = " ".repeat(SIDEBAR_INNER_PAD);
20
- // Layout: bar + gap + inner_pad + key + space + label + ... + inner_pad.
21
- // Bar va AFUERA del bg; el bg empieza en inner_pad.
22
- const FOCUS_OUTER = 2;
23
- const used = FOCUS_OUTER +
24
- SIDEBAR_INNER_PAD * 2 +
25
- [...tab.key].length +
26
- 1 +
27
- [...tab.label].length +
28
- (tab.badge ? [...tab.badge].length + 1 : 0) +
29
- (tab.alert ? 2 : 0);
30
- const spacerLen = Math.max(1, SIDEBAR_INNER_WIDTH - used);
31
- const spacer = " ".repeat(spacerLen);
32
- return (_jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { color: colors.accent, bold: active, children: focusGlyph }), _jsx(Text, { children: " " }), _jsx(Text, { ...bgProp, children: innerPad }), _jsx(Text, { ...bgProp, color: active ? colors.accent : colors.dim, bold: active, children: tab.key }), _jsx(Text, { ...bgProp, children: " " }), _jsx(Text, { ...bgProp, color: active ? colors.bright : colors.text, bold: active, children: tab.label }), _jsx(Text, { ...bgProp, wrap: "truncate-end", children: spacer }), tab.badge ? (_jsx(Text, { ...bgProp, color: active ? colors.accentSoft : colors.mute, children: tab.badge })) : null, tab.alert ? (_jsxs(_Fragment, { children: [_jsx(Text, { ...bgProp, children: " " }), _jsx(Text, { ...bgProp, color: colors.err, children: "\u25CF" })] })) : null, _jsx(Text, { ...bgProp, children: innerPad })] }));
33
- }
34
- function Divider() {
35
- return _jsx(Text, { color: colors.borderFaint, children: "─".repeat(DEFAULT_WIDTH - 2) });
36
- }
37
- //# sourceMappingURL=sidebar.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sidebar.js","sourceRoot":"","sources":["../../../../src/cli/tui/components/sidebar.tsx"],"names":[],"mappings":"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"}
@@ -1,41 +0,0 @@
1
- export type ToastTone = "ok" | "info" | "err";
2
- export interface ToastEntry {
3
- id: number;
4
- tone: ToastTone;
5
- title: string;
6
- body?: string;
7
- /** Duración en ms; default 3200 */
8
- duration?: number;
9
- }
10
- export interface ToastInput {
11
- tone?: ToastTone;
12
- title: string;
13
- body?: string;
14
- duration?: number;
15
- }
16
- /**
17
- * useToasts — hook que mantiene una pila de toasts y expone `push(toast)`.
18
- *
19
- * Auto-elimina cada toast después de `duration` (default 3.2s). El stack se
20
- * renderiza inline encima del footer cuando `toasts.length > 0`.
21
- */
22
- export declare function useToasts(): {
23
- toasts: ToastEntry[];
24
- push: (input: ToastInput) => void;
25
- dismiss: (id: number) => void;
26
- clear: () => void;
27
- };
28
- export interface ToastStackProps {
29
- toasts: ToastEntry[];
30
- /** Máximo de toasts visibles (los más nuevos arriba). Default 3. */
31
- max?: number;
32
- }
33
- /**
34
- * ToastStack — render inline de los toasts activos.
35
- *
36
- * En TTY no podemos posicionar absoluto, así que renderizamos al pie de la
37
- * pantalla (app.tsx coloca esto al final del root). Cada toast es una caja
38
- * con borde left del color del tone + título bold + body dim.
39
- */
40
- export declare function ToastStack({ toasts, max }: ToastStackProps): import("react/jsx-runtime").JSX.Element | null;
41
- //# sourceMappingURL=toast-stack.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"toast-stack.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/components/toast-stack.tsx"],"names":[],"mappings":"AAIA,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,MAAM,GAAG,KAAK,CAAC;AAE9C,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mCAAmC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAgB,SAAS;;kBAIU,UAAU;kBAiBV,MAAM;;EASxC;AAcD,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,oEAAoE;IACpE,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,EAAE,MAAM,EAAE,GAAO,EAAE,EAAE,eAAe,kDAoB9D"}
@@ -1,61 +0,0 @@
1
- import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
- import { Box, Text } from "ink";
3
- import { useCallback, useRef, useState } from "react";
4
- import { colors, icons } from "../theme.js";
5
- /**
6
- * useToasts — hook que mantiene una pila de toasts y expone `push(toast)`.
7
- *
8
- * Auto-elimina cada toast después de `duration` (default 3.2s). El stack se
9
- * renderiza inline encima del footer cuando `toasts.length > 0`.
10
- */
11
- export function useToasts() {
12
- const [toasts, setToasts] = useState([]);
13
- const seq = useRef(0);
14
- const push = useCallback((input) => {
15
- const id = ++seq.current;
16
- const tone = input.tone ?? "info";
17
- const duration = input.duration ?? 3200;
18
- const entry = {
19
- id,
20
- tone,
21
- title: input.title,
22
- duration,
23
- ...(input.body !== undefined ? { body: input.body } : {}),
24
- };
25
- setToasts((prev) => [...prev, entry]);
26
- setTimeout(() => {
27
- setToasts((prev) => prev.filter((t) => t.id !== id));
28
- }, duration);
29
- }, []);
30
- const dismiss = useCallback((id) => {
31
- setToasts((prev) => prev.filter((t) => t.id !== id));
32
- }, []);
33
- const clear = useCallback(() => {
34
- setToasts([]);
35
- }, []);
36
- return { toasts, push, dismiss, clear };
37
- }
38
- const TONE_COLOR = {
39
- ok: colors.success,
40
- info: colors.info,
41
- err: colors.error,
42
- };
43
- const TONE_ICON = {
44
- ok: icons.check,
45
- info: icons.bullet,
46
- err: icons.cross,
47
- };
48
- /**
49
- * ToastStack — render inline de los toasts activos.
50
- *
51
- * En TTY no podemos posicionar absoluto, así que renderizamos al pie de la
52
- * pantalla (app.tsx coloca esto al final del root). Cada toast es una caja
53
- * con borde left del color del tone + título bold + body dim.
54
- */
55
- export function ToastStack({ toasts, max = 3 }) {
56
- if (toasts.length === 0)
57
- return null;
58
- const visible = toasts.slice(-max);
59
- return (_jsx(Box, { flexDirection: "column", marginTop: 1, children: visible.map((t) => (_jsxs(Box, { marginTop: 0, children: [_jsxs(Text, { color: TONE_COLOR[t.tone], bold: true, children: [TONE_ICON[t.tone], " "] }), _jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { color: colors.fgBright, bold: true, children: t.title }), t.body ? _jsx(Text, { color: colors.fgSubtle, children: t.body }) : null] })] }, t.id))) }));
60
- }
61
- //# sourceMappingURL=toast-stack.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"toast-stack.js","sourceRoot":"","sources":["../../../../src/cli/tui/components/toast-stack.tsx"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- export type ToastTone = "success" | "error" | "info";
2
- export interface ToastProps {
3
- tone: ToastTone;
4
- message: string;
5
- }
6
- export declare function Toast({ tone, message }: ToastProps): import("react/jsx-runtime").JSX.Element;
7
- //# sourceMappingURL=toast.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"toast.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/components/toast.tsx"],"names":[],"mappings":"AAGA,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AAErD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAcD,wBAAgB,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,UAAU,2CASlD"}
@@ -1,17 +0,0 @@
1
- import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
- import { Box, Text } from "ink";
3
- import { colors, icons } from "../theme.js";
4
- const TONE_TO_COLOR = {
5
- success: colors.success,
6
- error: colors.error,
7
- info: colors.info,
8
- };
9
- const TONE_TO_ICON = {
10
- success: icons.check,
11
- error: icons.cross,
12
- info: icons.bullet,
13
- };
14
- export function Toast({ tone, message }) {
15
- return (_jsxs(Box, { marginTop: 1, children: [_jsxs(Text, { color: TONE_TO_COLOR[tone], bold: true, children: [TONE_TO_ICON[tone], " "] }), _jsx(Text, { color: colors.fg, children: message })] }));
16
- }
17
- //# sourceMappingURL=toast.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"toast.js","sourceRoot":"","sources":["../../../../src/cli/tui/components/toast.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAS5C,MAAM,aAAa,GAA8B;IAC/C,OAAO,EAAE,MAAM,CAAC,OAAO;IACvB,KAAK,EAAE,MAAM,CAAC,KAAK;IACnB,IAAI,EAAE,MAAM,CAAC,IAAI;CAClB,CAAC;AAEF,MAAM,YAAY,GAA8B;IAC9C,OAAO,EAAE,KAAK,CAAC,KAAK;IACpB,KAAK,EAAE,KAAK,CAAC,KAAK;IAClB,IAAI,EAAE,KAAK,CAAC,MAAM;CACnB,CAAC;AAEF,MAAM,UAAU,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,EAAc;IACjD,OAAO,CACL,MAAC,GAAG,IAAC,SAAS,EAAE,CAAC,aACf,MAAC,IAAI,IAAC,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,mBACnC,YAAY,CAAC,IAAI,CAAC,EAAE,GAAG,IACnB,EACP,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,EAAE,YAAG,OAAO,GAAQ,IACpC,CACP,CAAC;AACJ,CAAC"}
File without changes