@tacuchi/agent-workflow-cli 7.2.0 → 7.3.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 (85) hide show
  1. package/dist/application/project-tab-data.d.ts +119 -0
  2. package/dist/application/project-tab-data.d.ts.map +1 -0
  3. package/dist/application/project-tab-data.js +320 -0
  4. package/dist/application/project-tab-data.js.map +1 -0
  5. package/dist/cli/interactive-menu.d.ts +1 -1
  6. package/dist/cli/interactive-menu.d.ts.map +1 -1
  7. package/dist/cli/main.js +6 -0
  8. package/dist/cli/main.js.map +1 -1
  9. package/dist/cli/tui/app.d.ts.map +1 -1
  10. package/dist/cli/tui/app.js +116 -102
  11. package/dist/cli/tui/app.js.map +1 -1
  12. package/dist/cli/tui/components/command-palette.d.ts +39 -0
  13. package/dist/cli/tui/components/command-palette.d.ts.map +1 -0
  14. package/dist/cli/tui/components/command-palette.js +116 -0
  15. package/dist/cli/tui/components/command-palette.js.map +1 -0
  16. package/dist/cli/tui/components/header.d.ts +6 -0
  17. package/dist/cli/tui/components/header.d.ts.map +1 -1
  18. package/dist/cli/tui/components/header.js +8 -2
  19. package/dist/cli/tui/components/header.js.map +1 -1
  20. package/dist/cli/tui/components/host-chip.d.ts +28 -0
  21. package/dist/cli/tui/components/host-chip.d.ts.map +1 -0
  22. package/dist/cli/tui/components/host-chip.js +35 -0
  23. package/dist/cli/tui/components/host-chip.js.map +1 -0
  24. package/dist/cli/tui/components/keymap-bar.d.ts +8 -0
  25. package/dist/cli/tui/components/keymap-bar.d.ts.map +1 -1
  26. package/dist/cli/tui/components/keymap-bar.js +7 -1
  27. package/dist/cli/tui/components/keymap-bar.js.map +1 -1
  28. package/dist/cli/tui/components/page-head.d.ts +18 -0
  29. package/dist/cli/tui/components/page-head.d.ts.map +1 -0
  30. package/dist/cli/tui/components/page-head.js +14 -0
  31. package/dist/cli/tui/components/page-head.js.map +1 -0
  32. package/dist/cli/tui/components/pill.d.ts +16 -0
  33. package/dist/cli/tui/components/pill.d.ts.map +1 -0
  34. package/dist/cli/tui/components/pill.js +24 -0
  35. package/dist/cli/tui/components/pill.js.map +1 -0
  36. package/dist/cli/tui/components/tab-bar.d.ts +12 -0
  37. package/dist/cli/tui/components/tab-bar.d.ts.map +1 -1
  38. package/dist/cli/tui/components/tab-bar.js +11 -5
  39. package/dist/cli/tui/components/tab-bar.js.map +1 -1
  40. package/dist/cli/tui/components/toast-stack.d.ts +41 -0
  41. package/dist/cli/tui/components/toast-stack.d.ts.map +1 -0
  42. package/dist/cli/tui/components/toast-stack.js +61 -0
  43. package/dist/cli/tui/components/toast-stack.js.map +1 -0
  44. package/dist/cli/tui/hosts.d.ts +16 -0
  45. package/dist/cli/tui/hosts.d.ts.map +1 -0
  46. package/dist/cli/tui/hosts.js +31 -0
  47. package/dist/cli/tui/hosts.js.map +1 -0
  48. package/dist/cli/tui/tabs/mcp-tab.d.ts +22 -1
  49. package/dist/cli/tui/tabs/mcp-tab.d.ts.map +1 -1
  50. package/dist/cli/tui/tabs/mcp-tab.js +165 -129
  51. package/dist/cli/tui/tabs/mcp-tab.js.map +1 -1
  52. package/dist/cli/tui/tabs/plugins-tab.d.ts.map +1 -1
  53. package/dist/cli/tui/tabs/plugins-tab.js +78 -19
  54. package/dist/cli/tui/tabs/plugins-tab.js.map +1 -1
  55. package/dist/cli/tui/tabs/project-tab.d.ts +19 -0
  56. package/dist/cli/tui/tabs/project-tab.d.ts.map +1 -0
  57. package/dist/cli/tui/tabs/project-tab.js +188 -0
  58. package/dist/cli/tui/tabs/project-tab.js.map +1 -0
  59. package/dist/cli/tui/tabs/skills-tab.d.ts +17 -1
  60. package/dist/cli/tui/tabs/skills-tab.d.ts.map +1 -1
  61. package/dist/cli/tui/tabs/skills-tab.js +127 -224
  62. package/dist/cli/tui/tabs/skills-tab.js.map +1 -1
  63. package/dist/cli/tui/tabs/status-tab.d.ts +13 -0
  64. package/dist/cli/tui/tabs/status-tab.d.ts.map +1 -1
  65. package/dist/cli/tui/tabs/status-tab.js +52 -66
  66. package/dist/cli/tui/tabs/status-tab.js.map +1 -1
  67. package/dist/cli/tui/tabs/update-tab.d.ts +12 -1
  68. package/dist/cli/tui/tabs/update-tab.d.ts.map +1 -1
  69. package/dist/cli/tui/tabs/update-tab.js +54 -49
  70. package/dist/cli/tui/tabs/update-tab.js.map +1 -1
  71. package/dist/cli/tui/theme.d.ts +84 -12
  72. package/dist/cli/tui/theme.d.ts.map +1 -1
  73. package/dist/cli/tui/theme.js +100 -16
  74. package/dist/cli/tui/theme.js.map +1 -1
  75. package/dist/cli/tui/tui-prefs.d.ts +15 -0
  76. package/dist/cli/tui/tui-prefs.d.ts.map +1 -0
  77. package/dist/cli/tui/tui-prefs.js +45 -0
  78. package/dist/cli/tui/tui-prefs.js.map +1 -0
  79. package/package.json +1 -1
  80. package/skills/agent-workflow/commands/doctor.md +1 -1
  81. package/skills/agent-workflow/doctrine/compact/SKILL.md +1 -1
  82. package/skills/agent-workflow/doctrine/session/references/branch-verification.md +1 -1
  83. package/skills/agent-workflow/doctrine/session/references/commits-policy.md +2 -2
  84. package/skills/agent-workflow/specialties/design-deliver/SKILL.md +1 -1
  85. package/skills/agent-workflow/standards/coding-standards/references/fe-be-integration.md +2 -2
@@ -1,9 +1,17 @@
1
1
  export interface KeymapEntry {
2
2
  key: string;
3
3
  action: string;
4
+ /** Si true, el key se renderiza en accent bold (para Ctrl+K, Enter, etc) */
5
+ accent?: boolean;
4
6
  }
5
7
  export interface KeymapBarProps {
6
8
  entries: KeymapEntry[];
7
9
  }
10
+ /**
11
+ * KeymapBar — footer minimal con los atajos del tab activo.
12
+ *
13
+ * Una sola línea: `key label · key label · …`. Sin palette hint a la derecha
14
+ * (la entry de Ctrl+K va en la lista normal cuando aplica).
15
+ */
8
16
  export declare function KeymapBar({ entries }: KeymapBarProps): import("react/jsx-runtime").JSX.Element;
9
17
  //# sourceMappingURL=keymap-bar.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"keymap-bar.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/components/keymap-bar.tsx"],"names":[],"mappings":"AAGA,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;AAED,wBAAgB,SAAS,CAAC,EAAE,OAAO,EAAE,EAAE,cAAc,2CAcpD"}
1
+ {"version":3,"file":"keymap-bar.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/components/keymap-bar.tsx"],"names":[],"mappings":"AAGA,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,4EAA4E;IAC5E,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,EAAE,OAAO,EAAE,EAAE,cAAc,2CAiBpD"}
@@ -1,7 +1,13 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Box, Text } from "ink";
3
3
  import { colors } from "../theme.js";
4
+ /**
5
+ * KeymapBar — footer minimal con los atajos del tab activo.
6
+ *
7
+ * Una sola línea: `key label · key label · …`. Sin palette hint a la derecha
8
+ * (la entry de Ctrl+K va en la lista normal cuando aplica).
9
+ */
4
10
  export function KeymapBar({ entries }) {
5
- return (_jsx(Box, { marginTop: 1, children: entries.map((entry, idx) => (_jsxs(Box, { children: [idx > 0 ? _jsx(Text, { color: colors.fgMoreSubtle, children: " \u00B7 " }) : null, _jsx(Text, { color: colors.accent, bold: true, children: entry.key }), _jsxs(Text, { color: colors.fgSubtle, children: [" ", entry.action] })] }, `${entry.key}-${entry.action}`))) }));
11
+ return (_jsx(Box, { marginTop: 1, children: entries.map((entry, idx) => (_jsxs(Box, { children: [idx > 0 ? _jsx(Text, { color: colors.fgFaint, children: " \u00B7 " }) : null, _jsx(Text, { color: entry.accent ? colors.accent : colors.fgSubtle, ...(entry.accent ? { bold: true } : {}), children: entry.key }), _jsxs(Text, { color: colors.fgMoreSubtle, children: [" ", entry.action] })] }, `${entry.key}-${entry.action}`))) }));
6
12
  }
7
13
  //# sourceMappingURL=keymap-bar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"keymap-bar.js","sourceRoot":"","sources":["../../../../src/cli/tui/components/keymap-bar.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAWrC,MAAM,UAAU,SAAS,CAAC,EAAE,OAAO,EAAkB;IACnD,OAAO,CACL,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACd,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,CAC3B,MAAC,GAAG,eACD,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,YAAY,yBAAY,CAAC,CAAC,CAAC,IAAI,EAC9D,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,kBAC7B,KAAK,CAAC,GAAG,GACL,EACP,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,kBAAI,KAAK,CAAC,MAAM,IAAQ,KAL5C,GAAG,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,MAAM,EAAE,CAMlC,CACP,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"keymap-bar.js","sourceRoot":"","sources":["../../../../src/cli/tui/components/keymap-bar.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAarC;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,EAAE,OAAO,EAAkB;IACnD,OAAO,CACL,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACd,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,CAC3B,MAAC,GAAG,eACD,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,OAAO,yBAAY,CAAC,CAAC,CAAC,IAAI,EACzD,KAAC,IAAI,IACH,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,KACjD,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,YAEvC,KAAK,CAAC,GAAG,GACL,EACP,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,YAAY,kBAAI,KAAK,CAAC,MAAM,IAAQ,KARhD,GAAG,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,MAAM,EAAE,CASlC,CACP,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { type PillTone } from "./pill.js";
2
+ export interface PageHeadProps {
3
+ /** Título principal */
4
+ title: string;
5
+ /** Pill opcional al lado del título (counter, status) */
6
+ count?: {
7
+ label: string;
8
+ tone?: PillTone;
9
+ };
10
+ }
11
+ /**
12
+ * PageHead minimal — solo título bold + count opcional al lado.
13
+ *
14
+ * Antes incluía eyebrow + lede; los quitamos porque eran ruido en cada tab.
15
+ * Si un tab quiere prosa adicional, la inline donde aporte.
16
+ */
17
+ export declare function PageHead({ title, count }: PageHeadProps): import("react/jsx-runtime").JSX.Element;
18
+ //# sourceMappingURL=page-head.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-head.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/components/page-head.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAQ,KAAK,QAAQ,EAAE,MAAM,WAAW,CAAC;AAEhD,MAAM,WAAW,aAAa;IAC5B,uBAAuB;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,yDAAyD;IACzD,KAAK,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,QAAQ,CAAA;KAAE,CAAC;CAC5C;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,aAAa,2CAevD"}
@@ -0,0 +1,14 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text } from "ink";
3
+ import { colors } from "../theme.js";
4
+ import { Pill } from "./pill.js";
5
+ /**
6
+ * PageHead minimal — solo título bold + count opcional al lado.
7
+ *
8
+ * Antes incluía eyebrow + lede; los quitamos porque eran ruido en cada tab.
9
+ * Si un tab quiere prosa adicional, la inline donde aporte.
10
+ */
11
+ export function PageHead({ title, count }) {
12
+ return (_jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { color: colors.fgBright, bold: true, children: title }), count ? (_jsx(Box, { marginLeft: 1, children: _jsx(Pill, { tone: count.tone ?? "muted", preserveCase: true, children: count.label }) })) : null] }));
13
+ }
14
+ //# sourceMappingURL=page-head.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-head.js","sourceRoot":"","sources":["../../../../src/cli/tui/components/page-head.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,IAAI,EAAiB,MAAM,WAAW,CAAC;AAShD;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAiB;IACtD,OAAO,CACL,MAAC,GAAG,IAAC,YAAY,EAAE,CAAC,aAClB,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,IAAI,kBAC/B,KAAK,GACD,EACN,KAAK,CAAC,CAAC,CAAC,CACP,KAAC,GAAG,IAAC,UAAU,EAAE,CAAC,YAChB,KAAC,IAAI,IAAC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,OAAO,EAAE,YAAY,kBAC5C,KAAK,CAAC,KAAK,GACP,GACH,CACP,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,16 @@
1
+ export type PillTone = "ok" | "warn" | "err" | "info" | "muted" | "accent";
2
+ export interface PillProps {
3
+ tone?: PillTone;
4
+ children: string;
5
+ /** Si true, mantiene case del texto; default lo deja en lowercase. */
6
+ preserveCase?: boolean;
7
+ }
8
+ /**
9
+ * Pill — etiqueta corta tipo `[label]` con tono de color.
10
+ *
11
+ * Ink no permite `border-radius` ni `background-color` arbitrario en todos los
12
+ * terminales — usamos paréntesis cuadrados y color de texto para señalizar el
13
+ * tono. Mantiene la legibilidad y respeta la paleta sobria.
14
+ */
15
+ export declare function Pill({ tone, children, preserveCase }: PillProps): import("react/jsx-runtime").JSX.Element;
16
+ //# sourceMappingURL=pill.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pill.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/components/pill.tsx"],"names":[],"mappings":"AAGA,MAAM,MAAM,QAAQ,GAAG,IAAI,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE3E,MAAM,WAAW,SAAS;IACxB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,sEAAsE;IACtE,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;;;;;GAMG;AACH,wBAAgB,IAAI,CAAC,EAAE,IAAc,EAAE,QAAQ,EAAE,YAAoB,EAAE,EAAE,SAAS,2CAUjF"}
@@ -0,0 +1,24 @@
1
+ import { jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Text } from "ink";
3
+ import { colors } from "../theme.js";
4
+ /**
5
+ * Pill — etiqueta corta tipo `[label]` con tono de color.
6
+ *
7
+ * Ink no permite `border-radius` ni `background-color` arbitrario en todos los
8
+ * terminales — usamos paréntesis cuadrados y color de texto para señalizar el
9
+ * tono. Mantiene la legibilidad y respeta la paleta sobria.
10
+ */
11
+ export function Pill({ tone = "muted", children, preserveCase = false }) {
12
+ const color = TONE_COLOR[tone];
13
+ const text = preserveCase ? children : children.toLowerCase();
14
+ return (_jsxs(Text, { color: color, children: ["[", text, "]"] }));
15
+ }
16
+ const TONE_COLOR = {
17
+ ok: colors.success,
18
+ warn: colors.warning,
19
+ err: colors.error,
20
+ info: colors.info,
21
+ muted: colors.fgMoreSubtle,
22
+ accent: colors.accent,
23
+ };
24
+ //# sourceMappingURL=pill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pill.js","sourceRoot":"","sources":["../../../../src/cli/tui/components/pill.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAWrC;;;;;;GAMG;AACH,MAAM,UAAU,IAAI,CAAC,EAAE,IAAI,GAAG,OAAO,EAAE,QAAQ,EAAE,YAAY,GAAG,KAAK,EAAa;IAChF,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;IAC9D,OAAO,CACL,MAAC,IAAI,IAAC,KAAK,EAAE,KAAK,aACf,GAAG,EACH,IAAI,EACJ,GAAG,IACC,CACR,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,GAA6B;IAC3C,EAAE,EAAE,MAAM,CAAC,OAAO;IAClB,IAAI,EAAE,MAAM,CAAC,OAAO;IACpB,GAAG,EAAE,MAAM,CAAC,KAAK;IACjB,IAAI,EAAE,MAAM,CAAC,IAAI;IACjB,KAAK,EAAE,MAAM,CAAC,YAAY;IAC1B,MAAM,EAAE,MAAM,CAAC,MAAM;CACtB,CAAC"}
@@ -1,11 +1,23 @@
1
1
  export interface TabDescriptor<T extends string> {
2
2
  id: T;
3
3
  label: string;
4
+ /** Atajo numérico (1-6). Se renderiza dim antes del label. */
5
+ key?: string;
6
+ /** Texto del badge — solo se muestra cuando es relevante. */
4
7
  badge?: string;
8
+ /** Dot alert al final del label si hay novedades. */
9
+ alert?: boolean;
5
10
  }
6
11
  export interface TabBarProps<T extends string> {
7
12
  tabs: TabDescriptor<T>[];
8
13
  activeId: T;
9
14
  }
15
+ /**
16
+ * TabBar minimal — `key label` por tab.
17
+ *
18
+ * Active = label inverse (fondo accent + texto bg) — destaca como un chip.
19
+ * Inactive = label mute + key faint.
20
+ * Badge dim opcional. Alert dot rojo opcional.
21
+ */
10
22
  export declare function TabBar<T extends string>({ tabs, activeId }: TabBarProps<T>): import("react/jsx-runtime").JSX.Element;
11
23
  //# sourceMappingURL=tab-bar.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tab-bar.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/components/tab-bar.tsx"],"names":[],"mappings":"AAGA,MAAM,WAAW,aAAa,CAAC,CAAC,SAAS,MAAM;IAC7C,EAAE,EAAE,CAAC,CAAC;IACN,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW,CAAC,CAAC,SAAS,MAAM;IAC3C,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;IACzB,QAAQ,EAAE,CAAC,CAAC;CACb;AAED,wBAAgB,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,2CA6B1E"}
1
+ {"version":3,"file":"tab-bar.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/components/tab-bar.tsx"],"names":[],"mappings":"AAGA,MAAM,WAAW,aAAa,CAAC,CAAC,SAAS,MAAM;IAC7C,EAAE,EAAE,CAAC,CAAC;IACN,KAAK,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qDAAqD;IACrD,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,WAAW,CAAC,CAAC,SAAS,MAAM;IAC3C,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;IACzB,QAAQ,EAAE,CAAC,CAAC;CACb;AAED;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,2CAuB1E"}
@@ -1,11 +1,17 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
2
  import { Box, Text } from "ink";
3
- import { colors, icons } from "../theme.js";
3
+ import { colors } from "../theme.js";
4
+ /**
5
+ * TabBar minimal — `key label` por tab.
6
+ *
7
+ * Active = label inverse (fondo accent + texto bg) — destaca como un chip.
8
+ * Inactive = label mute + key faint.
9
+ * Badge dim opcional. Alert dot rojo opcional.
10
+ */
4
11
  export function TabBar({ tabs, activeId }) {
5
- return (_jsx(Box, { children: tabs.map((tab, idx) => {
12
+ return (_jsx(Box, { marginBottom: 1, children: tabs.map((tab, idx) => {
6
13
  const isActive = tab.id === activeId;
7
- const labelText = tab.badge !== undefined ? `${tab.label} (${tab.badge})` : tab.label;
8
- return (_jsxs(Box, { children: [idx > 0 ? _jsx(Text, { children: icons.tabSeparator }) : null, isActive ? (_jsxs(_Fragment, { children: [_jsxs(Text, { color: colors.accent, children: [icons.tabActiveLeft, " "] }), _jsx(Text, { color: colors.fg, bold: true, children: labelText }), _jsxs(Text, { color: colors.accent, children: [" ", icons.tabActiveRight] })] })) : (_jsxs(_Fragment, { children: [_jsx(Text, { color: colors.fgMoreSubtle, children: " " }), _jsx(Text, { color: colors.fgSubtle, children: labelText }), _jsx(Text, { color: colors.fgMoreSubtle, children: " " })] }))] }, tab.id));
14
+ return (_jsxs(Box, { marginLeft: idx === 0 ? 0 : 2, children: [tab.key ? (_jsxs(Text, { color: isActive ? colors.accent : colors.fgFaint, children: [tab.key, " "] })) : null, _jsx(Text, { color: isActive ? colors.accent : colors.fgSubtle, ...(isActive ? { bold: true, inverse: true } : {}), children: isActive ? ` ${tab.label} ` : tab.label }), tab.badge !== undefined ? _jsxs(Text, { color: colors.fgFaint, children: [" ", tab.badge] }) : null, tab.alert ? _jsx(Text, { color: colors.error, children: " \u2022" }) : null] }, tab.id));
9
15
  }) }));
10
16
  }
11
17
  //# sourceMappingURL=tab-bar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tab-bar.js","sourceRoot":"","sources":["../../../../src/cli/tui/components/tab-bar.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAa5C,MAAM,UAAU,MAAM,CAAmB,EAAE,IAAI,EAAE,QAAQ,EAAkB;IACzE,OAAO,CACL,KAAC,GAAG,cACD,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YACrB,MAAM,QAAQ,GAAG,GAAG,CAAC,EAAE,KAAK,QAAQ,CAAC;YACrC,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;YACtF,OAAO,CACL,MAAC,GAAG,eACD,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,KAAC,IAAI,cAAE,KAAK,CAAC,YAAY,GAAQ,CAAC,CAAC,CAAC,IAAI,EAClD,QAAQ,CAAC,CAAC,CAAC,CACV,8BACE,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,aAAG,KAAK,CAAC,aAAa,SAAS,EACzD,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,kBACzB,SAAS,GACL,EACP,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,kBAAI,KAAK,CAAC,cAAc,IAAQ,IACzD,CACJ,CAAC,CAAC,CAAC,CACF,8BACE,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,YAAY,kBAAU,EAC1C,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,YAAG,SAAS,GAAQ,EAChD,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,YAAY,kBAAU,IACzC,CACJ,KAhBO,GAAG,CAAC,EAAE,CAiBV,CACP,CAAC;QACJ,CAAC,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"tab-bar.js","sourceRoot":"","sources":["../../../../src/cli/tui/components/tab-bar.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAkBrC;;;;;;GAMG;AACH,MAAM,UAAU,MAAM,CAAmB,EAAE,IAAI,EAAE,QAAQ,EAAkB;IACzE,OAAO,CACL,KAAC,GAAG,IAAC,YAAY,EAAE,CAAC,YACjB,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YACrB,MAAM,QAAQ,GAAG,GAAG,CAAC,EAAE,KAAK,QAAQ,CAAC;YACrC,OAAO,CACL,MAAC,GAAG,IAAc,UAAU,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAC5C,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CACT,MAAC,IAAI,IAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,aAAG,GAAG,CAAC,GAAG,SAAS,CAC1E,CAAC,CAAC,CAAC,IAAI,EACR,KAAC,IAAI,IACH,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,KAC7C,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,YAElD,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,GACnC,EACN,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,OAAO,kBAAI,GAAG,CAAC,KAAK,IAAQ,CAAC,CAAC,CAAC,IAAI,EACjF,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,wBAAW,CAAC,CAAC,CAAC,IAAI,KAXhD,GAAG,CAAC,EAAE,CAYV,CACP,CAAC;QACJ,CAAC,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,41 @@
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 arriba del footer
37
+ * (app.tsx coloca esto entre `<Content/>` y `<KeymapBar/>`). Cada toast es una
38
+ * caja 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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,61 @@
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 arriba del footer
52
+ * (app.tsx coloca esto entre `<Content/>` y `<KeymapBar/>`). Cada toast es una
53
+ * caja 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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toast-stack.js","sourceRoot":"","sources":["../../../../src/cli/tui/components/toast-stack.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export interface HostMeta {
2
+ /** id estable usado en data + atajos */
3
+ id: string;
4
+ /** label largo (mostrar en cards / detail panels) */
5
+ name: string;
6
+ /** glyph de 1 letra para chips compactos */
7
+ glyph: string;
8
+ /** alias corto para textos densos */
9
+ short: string;
10
+ /** true si install/uninstall/detect ya soportan este host */
11
+ backed: boolean;
12
+ }
13
+ export declare const HOSTS: readonly HostMeta[];
14
+ export declare const HOST_BY_ID: Record<string, HostMeta>;
15
+ export declare function hostMeta(id: string): HostMeta;
16
+ //# sourceMappingURL=hosts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hosts.d.ts","sourceRoot":"","sources":["../../../src/cli/tui/hosts.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,QAAQ;IACvB,wCAAwC;IACxC,EAAE,EAAE,MAAM,CAAC;IACX,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,6DAA6D;IAC7D,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,eAAO,MAAM,KAAK,EAAE,SAAS,QAAQ,EAQ3B,CAAC;AAEX,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAmD,CAAC;AAEpG,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,CAU7C"}
@@ -0,0 +1,31 @@
1
+ // Host registry compartido por toda la TUI.
2
+ //
3
+ // Single source of truth para chips, listas, status. Los servicios backend
4
+ // (install/uninstall/cache/detect) usan su propio `InstallTarget` (5 hosts hoy:
5
+ // claude/codex/warp/oz/agents). Este registry incluye además los 3 futuros
6
+ // (gemini/opencode/crush) que la UI escala — pero el backend los reporta como
7
+ // `not installed` hasta que sus paths reales se implementen.
8
+ //
9
+ // El campo `backed` indica si el host tiene servicio de install/uninstall real.
10
+ // Hosts con `backed: false` se renderizan en la lista pero la acción muestra
11
+ // un toast "host no soportado todavía".
12
+ export const HOSTS = [
13
+ { id: "claude", name: "Claude Code", glyph: "C", short: "claude", backed: true },
14
+ { id: "codex", name: "Codex", glyph: "X", short: "codex", backed: true },
15
+ { id: "warp", name: "Warp Terminal", glyph: "W", short: "warp", backed: true },
16
+ { id: "gemini", name: "Gemini CLI", glyph: "G", short: "gemini", backed: false },
17
+ { id: "opencode", name: "OpenCode", glyph: "O", short: "opencode", backed: false },
18
+ { id: "crush", name: "Crush", glyph: "R", short: "crush", backed: false },
19
+ { id: "agents", name: "Agents", glyph: "A", short: "agents", backed: true },
20
+ ];
21
+ export const HOST_BY_ID = Object.fromEntries(HOSTS.map((h) => [h.id, h]));
22
+ export function hostMeta(id) {
23
+ return (HOST_BY_ID[id] ?? {
24
+ id,
25
+ name: id,
26
+ glyph: id[0]?.toUpperCase() ?? "?",
27
+ short: id,
28
+ backed: false,
29
+ });
30
+ }
31
+ //# sourceMappingURL=hosts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hosts.js","sourceRoot":"","sources":["../../../src/cli/tui/hosts.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,EAAE;AACF,2EAA2E;AAC3E,gFAAgF;AAChF,2EAA2E;AAC3E,8EAA8E;AAC9E,6DAA6D;AAC7D,EAAE;AACF,gFAAgF;AAChF,6EAA6E;AAC7E,wCAAwC;AAexC,MAAM,CAAC,MAAM,KAAK,GAAwB;IACxC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE;IAChF,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE;IACxE,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE;IAC9E,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE;IAChF,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE;IAClF,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE;IACzE,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE;CACnE,CAAC;AAEX,MAAM,CAAC,MAAM,UAAU,GAA6B,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAEpG,MAAM,UAAU,QAAQ,CAAC,EAAU;IACjC,OAAO,CACL,UAAU,CAAC,EAAE,CAAC,IAAI;QAChB,EAAE;QACF,IAAI,EAAE,EAAE;QACR,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,GAAG;QAClC,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,KAAK;KACd,CACF,CAAC;AACJ,CAAC"}
@@ -2,6 +2,27 @@ import type { CliContext } from "../../types.js";
2
2
  export interface McpTabProps {
3
3
  ctx: CliContext;
4
4
  isActive: boolean;
5
+ onToast?: (msg: {
6
+ tone: "ok" | "info" | "err";
7
+ title: string;
8
+ body?: string;
9
+ }) => void;
5
10
  }
6
- export declare function McpTab({ ctx, isActive }: McpTabProps): import("react/jsx-runtime").JSX.Element;
11
+ /**
12
+ * MCPTab redesign — split view:
13
+ *
14
+ * ┌─ conexiones ──────────────┐ ┌─ detalle (selected) ─┐
15
+ * │ › qtc-cert DB_CERT_DSN │ │ host visible en │
16
+ * │ qtc-prod DB_PROD_DSN │ │ acciones: i/o/w/t/r │
17
+ * └───────────────────────────┘ └──────────────────────┘
18
+ *
19
+ * - `↑↓` mueve cursor en la lista
20
+ * - `n` nueva conexión, `r` eliminar la actual, `t` doctor
21
+ * - `i/o/w` install en claude/codex/warp respectivamente
22
+ * - Host chips reemplazan columnas Claude/Codex/Warp
23
+ *
24
+ * Mantiene los modos (new-name/new-dsn/confirm-delete/busy) tal cual; sólo
25
+ * cambia el render de list y la forma de invocar acciones.
26
+ */
27
+ export declare function McpTab({ ctx, isActive, onToast }: McpTabProps): import("react/jsx-runtime").JSX.Element;
7
28
  //# sourceMappingURL=mcp-tab.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-tab.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/tabs/mcp-tab.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAsCjD,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,UAAU,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAsCD,wBAAgB,MAAM,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,WAAW,2CAmRpD"}
1
+ {"version":3,"file":"mcp-tab.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/tabs/mcp-tab.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAoCjD,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,UAAU,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE;QAAE,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,KAAK,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CACxF;AAYD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,MAAM,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,WAAW,2CAiQ7D"}