@tacuchi/agent-workflow-cli 7.2.1 → 7.3.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/dist/application/project-tab-data.d.ts +119 -0
- package/dist/application/project-tab-data.d.ts.map +1 -0
- package/dist/application/project-tab-data.js +320 -0
- package/dist/application/project-tab-data.js.map +1 -0
- package/dist/cli/interactive-menu.d.ts +1 -1
- package/dist/cli/interactive-menu.d.ts.map +1 -1
- package/dist/cli/main.js +6 -0
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/tui/app.d.ts.map +1 -1
- package/dist/cli/tui/app.js +115 -102
- package/dist/cli/tui/app.js.map +1 -1
- package/dist/cli/tui/components/command-palette.d.ts +39 -0
- package/dist/cli/tui/components/command-palette.d.ts.map +1 -0
- package/dist/cli/tui/components/command-palette.js +116 -0
- package/dist/cli/tui/components/command-palette.js.map +1 -0
- package/dist/cli/tui/components/header.d.ts +6 -0
- package/dist/cli/tui/components/header.d.ts.map +1 -1
- package/dist/cli/tui/components/header.js +8 -2
- package/dist/cli/tui/components/header.js.map +1 -1
- package/dist/cli/tui/components/host-chip.d.ts +28 -0
- package/dist/cli/tui/components/host-chip.d.ts.map +1 -0
- package/dist/cli/tui/components/host-chip.js +35 -0
- package/dist/cli/tui/components/host-chip.js.map +1 -0
- package/dist/cli/tui/components/keymap-bar.d.ts +8 -0
- package/dist/cli/tui/components/keymap-bar.d.ts.map +1 -1
- package/dist/cli/tui/components/keymap-bar.js +7 -1
- package/dist/cli/tui/components/keymap-bar.js.map +1 -1
- package/dist/cli/tui/components/page-head.d.ts +18 -0
- package/dist/cli/tui/components/page-head.d.ts.map +1 -0
- package/dist/cli/tui/components/page-head.js +14 -0
- package/dist/cli/tui/components/page-head.js.map +1 -0
- package/dist/cli/tui/components/pill.d.ts +16 -0
- package/dist/cli/tui/components/pill.d.ts.map +1 -0
- package/dist/cli/tui/components/pill.js +24 -0
- package/dist/cli/tui/components/pill.js.map +1 -0
- package/dist/cli/tui/components/tab-bar.d.ts +12 -0
- package/dist/cli/tui/components/tab-bar.d.ts.map +1 -1
- package/dist/cli/tui/components/tab-bar.js +11 -5
- package/dist/cli/tui/components/tab-bar.js.map +1 -1
- package/dist/cli/tui/components/toast-stack.d.ts +41 -0
- package/dist/cli/tui/components/toast-stack.d.ts.map +1 -0
- package/dist/cli/tui/components/toast-stack.js +61 -0
- package/dist/cli/tui/components/toast-stack.js.map +1 -0
- package/dist/cli/tui/hosts.d.ts +16 -0
- package/dist/cli/tui/hosts.d.ts.map +1 -0
- package/dist/cli/tui/hosts.js +31 -0
- package/dist/cli/tui/hosts.js.map +1 -0
- package/dist/cli/tui/tabs/mcp-tab.d.ts +21 -1
- package/dist/cli/tui/tabs/mcp-tab.d.ts.map +1 -1
- package/dist/cli/tui/tabs/mcp-tab.js +234 -139
- package/dist/cli/tui/tabs/mcp-tab.js.map +1 -1
- package/dist/cli/tui/tabs/plugins-tab.d.ts.map +1 -1
- package/dist/cli/tui/tabs/plugins-tab.js +78 -19
- package/dist/cli/tui/tabs/plugins-tab.js.map +1 -1
- package/dist/cli/tui/tabs/project-tab.d.ts +19 -0
- package/dist/cli/tui/tabs/project-tab.d.ts.map +1 -0
- package/dist/cli/tui/tabs/project-tab.js +188 -0
- package/dist/cli/tui/tabs/project-tab.js.map +1 -0
- package/dist/cli/tui/tabs/skills-tab.d.ts +17 -1
- package/dist/cli/tui/tabs/skills-tab.d.ts.map +1 -1
- package/dist/cli/tui/tabs/skills-tab.js +131 -224
- package/dist/cli/tui/tabs/skills-tab.js.map +1 -1
- package/dist/cli/tui/tabs/status-tab.d.ts +13 -0
- package/dist/cli/tui/tabs/status-tab.d.ts.map +1 -1
- package/dist/cli/tui/tabs/status-tab.js +52 -66
- package/dist/cli/tui/tabs/status-tab.js.map +1 -1
- package/dist/cli/tui/tabs/update-tab.d.ts +12 -1
- package/dist/cli/tui/tabs/update-tab.d.ts.map +1 -1
- package/dist/cli/tui/tabs/update-tab.js +54 -49
- package/dist/cli/tui/tabs/update-tab.js.map +1 -1
- package/dist/cli/tui/theme.d.ts +84 -12
- package/dist/cli/tui/theme.d.ts.map +1 -1
- package/dist/cli/tui/theme.js +100 -16
- package/dist/cli/tui/theme.js.map +1 -1
- package/dist/cli/tui/tui-prefs.d.ts +15 -0
- package/dist/cli/tui/tui-prefs.d.ts.map +1 -0
- package/dist/cli/tui/tui-prefs.js +45 -0
- package/dist/cli/tui/tui-prefs.js.map +1 -0
- package/package.json +1 -1
package/dist/cli/tui/app.js
CHANGED
|
@@ -1,96 +1,143 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { Box,
|
|
3
|
-
import { useMemo, useState } from "react";
|
|
2
|
+
import { Box, useApp, useInput } from "ink";
|
|
3
|
+
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
4
4
|
import { Header } from "./components/header.js";
|
|
5
5
|
import { KeymapBar } from "./components/keymap-bar.js";
|
|
6
6
|
import { ScreenFrame } from "./components/screen-frame.js";
|
|
7
7
|
import { TabBar } from "./components/tab-bar.js";
|
|
8
|
+
import { ToastStack, useToasts } from "./components/toast-stack.js";
|
|
8
9
|
import { InputLockProvider, useInputLock } from "./input-lock.js";
|
|
9
10
|
import { McpTab } from "./tabs/mcp-tab.js";
|
|
10
11
|
import { PluginsTab } from "./tabs/plugins-tab.js";
|
|
12
|
+
import { ProjectTab } from "./tabs/project-tab.js";
|
|
11
13
|
import { SkillsTab } from "./tabs/skills-tab.js";
|
|
12
14
|
import { StatusTab } from "./tabs/status-tab.js";
|
|
13
15
|
import { UpdateTab } from "./tabs/update-tab.js";
|
|
14
|
-
import {
|
|
15
|
-
const TAB_ORDER = [
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
16
|
+
import { TuiPrefsService } from "./tui-prefs.js";
|
|
17
|
+
const TAB_ORDER = [
|
|
18
|
+
"status",
|
|
19
|
+
"project",
|
|
20
|
+
"mcp",
|
|
21
|
+
"skills",
|
|
22
|
+
"plugins",
|
|
23
|
+
"update",
|
|
22
24
|
];
|
|
25
|
+
// Atajo numérico → tab id.
|
|
26
|
+
const TAB_BY_KEY = {
|
|
27
|
+
"1": "status",
|
|
28
|
+
"2": "project",
|
|
29
|
+
"3": "mcp",
|
|
30
|
+
"4": "skills",
|
|
31
|
+
"5": "plugins",
|
|
32
|
+
"6": "update",
|
|
33
|
+
};
|
|
34
|
+
const QUIT_HINT = { key: "q", action: "salir" };
|
|
35
|
+
const TAB_HINT = { key: "Tab", action: "siguiente" };
|
|
36
|
+
const KEYS_BY_TAB = {
|
|
37
|
+
status: [TAB_HINT, QUIT_HINT],
|
|
38
|
+
project: [
|
|
39
|
+
{ key: "↑↓", action: "navegar" },
|
|
40
|
+
{ key: "⏎", action: "aplicar", accent: true },
|
|
41
|
+
QUIT_HINT,
|
|
42
|
+
],
|
|
43
|
+
mcp: [
|
|
44
|
+
{ key: "↑↓", action: "navegar" },
|
|
45
|
+
{ key: "⏎", action: "acciones", accent: true },
|
|
46
|
+
QUIT_HINT,
|
|
47
|
+
],
|
|
48
|
+
skills: [
|
|
49
|
+
{ key: "↑↓", action: "navegar" },
|
|
50
|
+
{ key: "⏎", action: "acciones", accent: true },
|
|
51
|
+
QUIT_HINT,
|
|
52
|
+
],
|
|
53
|
+
plugins: [
|
|
54
|
+
{ key: "↑↓", action: "navegar" },
|
|
55
|
+
{ key: "/", action: "buscar" },
|
|
56
|
+
{ key: "f", action: "filtros" },
|
|
57
|
+
QUIT_HINT,
|
|
58
|
+
],
|
|
59
|
+
update: [
|
|
60
|
+
{ key: "i", action: "aplicar", accent: true },
|
|
61
|
+
{ key: "r", action: "buscar" },
|
|
62
|
+
QUIT_HINT,
|
|
63
|
+
],
|
|
64
|
+
};
|
|
23
65
|
export function App(props) {
|
|
24
66
|
return (_jsx(InputLockProvider, { children: _jsx(AppShell, { ...props }) }));
|
|
25
67
|
}
|
|
26
68
|
function AppShell({ version, ctx, onResult }) {
|
|
27
69
|
const [activeTab, setActiveTab] = useState("status");
|
|
28
|
-
const [
|
|
70
|
+
const [density, setDensity] = useState("comfortable");
|
|
29
71
|
const { exit } = useApp();
|
|
30
72
|
const { locked: inputLocked } = useInputLock();
|
|
73
|
+
const { toasts, push: pushToast } = useToasts();
|
|
74
|
+
const prefsSvc = useMemo(() => new TuiPrefsService(ctx.fs, ctx.paths), [ctx.fs, ctx.paths]);
|
|
75
|
+
useEffect(() => {
|
|
76
|
+
void (async () => {
|
|
77
|
+
const prefs = await prefsSvc.load();
|
|
78
|
+
setDensity(prefs.density);
|
|
79
|
+
})();
|
|
80
|
+
}, [prefsSvc]);
|
|
81
|
+
/**
|
|
82
|
+
* Despacha acciones provenientes de las tabs (Proyecto landing, Update, etc).
|
|
83
|
+
* Las acciones que requieren ejecutar un comando CLI con stdin (init, update)
|
|
84
|
+
* salen del TUI primero y se manejan en `dispatchMenuAction` del main.
|
|
85
|
+
*/
|
|
86
|
+
const runAction = useCallback((id, _payload) => {
|
|
87
|
+
if (id === "project-init") {
|
|
88
|
+
onResult({ kind: "menu-action", action: "project-init" });
|
|
89
|
+
exit();
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
if (id === "hub-init") {
|
|
93
|
+
onResult({ kind: "menu-action", action: "hub-init" });
|
|
94
|
+
exit();
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
if (id === "quit") {
|
|
98
|
+
onResult({ kind: "exit", exitCode: 0 });
|
|
99
|
+
exit();
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
if (id === "git:status") {
|
|
103
|
+
pushToast({
|
|
104
|
+
tone: "info",
|
|
105
|
+
title: "git status",
|
|
106
|
+
body: "Abrí tu terminal para ver el detalle.",
|
|
107
|
+
});
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
pushToast({ tone: "info", title: id });
|
|
111
|
+
}, [pushToast, onResult, exit]);
|
|
31
112
|
useInput((input, key) => {
|
|
32
|
-
if (
|
|
33
|
-
|
|
113
|
+
if (inputLocked)
|
|
114
|
+
return;
|
|
115
|
+
if (input === "q" || input === "Q") {
|
|
116
|
+
onResult({ kind: "exit", exitCode: 0 });
|
|
117
|
+
exit();
|
|
34
118
|
return;
|
|
35
119
|
}
|
|
36
|
-
|
|
37
|
-
setActiveTab,
|
|
38
|
-
|
|
39
|
-
onExit: () => {
|
|
40
|
-
onResult({ kind: "exit", exitCode: 0 });
|
|
41
|
-
exit();
|
|
42
|
-
},
|
|
43
|
-
});
|
|
44
|
-
}, { isActive: !inputLocked });
|
|
45
|
-
const keymap = useMemo(() => {
|
|
46
|
-
if (inputLocked) {
|
|
47
|
-
return [
|
|
48
|
-
{ key: "⏎", action: "aceptar" },
|
|
49
|
-
{ key: "Esc", action: "cancelar" },
|
|
50
|
-
];
|
|
120
|
+
if (key.tab) {
|
|
121
|
+
setActiveTab((t) => cycleTab(t, key.shift === true));
|
|
122
|
+
return;
|
|
51
123
|
}
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
124
|
+
const target = TAB_BY_KEY[input];
|
|
125
|
+
if (target)
|
|
126
|
+
setActiveTab(target);
|
|
127
|
+
}, { isActive: true });
|
|
128
|
+
const tabs = [
|
|
129
|
+
{ id: "status", label: "Status", key: "1" },
|
|
130
|
+
{ id: "project", label: "Proyecto", key: "2" },
|
|
131
|
+
{ id: "mcp", label: "MCP", key: "3" },
|
|
132
|
+
{ id: "skills", label: "Skills", key: "4" },
|
|
133
|
+
{ id: "plugins", label: "Plugins", key: "5" },
|
|
134
|
+
{ id: "update", label: "Update", key: "6", alert: true },
|
|
135
|
+
];
|
|
136
|
+
const keymap = KEYS_BY_TAB[activeTab] ?? [];
|
|
137
|
+
return (_jsxs(ScreenFrame, { children: [_jsx(Header, { version: version, cwd: ctx.env.cwd(), homeDir: ctx.env.homeDir() }), _jsx(TabBar, { tabs: tabs, activeId: activeTab }), _jsxs(Box, { marginTop: density === "compact" ? 0 : 1, flexDirection: "column", children: [activeTab === "status" ? _jsx(StatusTab, { ctx: ctx, isActive: true }) : null, activeTab === "project" ? (_jsx(ProjectTab, { ctx: ctx, isActive: true, onRunAction: runAction })) : null, activeTab === "mcp" ? _jsx(McpTab, { ctx: ctx, isActive: true, onToast: pushToast }) : null, activeTab === "skills" ? (_jsx(SkillsTab, { ctx: ctx, isActive: true, onToast: pushToast })) : null, activeTab === "update" ? (_jsx(UpdateTab, { ctx: ctx, version: version, isActive: true, onToast: pushToast, onRequestUpdate: () => {
|
|
62
138
|
onResult({ kind: "menu-action", action: "update" });
|
|
63
139
|
exit();
|
|
64
|
-
} })) : null, activeTab === "plugins" ? _jsx(PluginsTab, { ctx: ctx, isActive:
|
|
65
|
-
}
|
|
66
|
-
function handleHelpKey(input, key, setHelpOpen) {
|
|
67
|
-
if (key.escape || input === "?" || input === "q" || input === "Q") {
|
|
68
|
-
setHelpOpen(false);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
function handleAppKey(input, key, handlers) {
|
|
72
|
-
if (input === "q" || input === "Q") {
|
|
73
|
-
handlers.onExit();
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
if (input === "?") {
|
|
77
|
-
handlers.setHelpOpen(true);
|
|
78
|
-
return;
|
|
79
|
-
}
|
|
80
|
-
if (key.tab) {
|
|
81
|
-
handlers.setActiveTab((t) => cycleTab(t, key.shift === true));
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
84
|
-
const byNumber = {
|
|
85
|
-
"1": "status",
|
|
86
|
-
"2": "mcp",
|
|
87
|
-
"3": "skills",
|
|
88
|
-
"4": "plugins",
|
|
89
|
-
"5": "update",
|
|
90
|
-
};
|
|
91
|
-
const target = byNumber[input];
|
|
92
|
-
if (target)
|
|
93
|
-
handlers.setActiveTab(target);
|
|
140
|
+
} })) : null, activeTab === "plugins" ? _jsx(PluginsTab, { ctx: ctx, isActive: true }) : null] }), _jsx(ToastStack, { toasts: toasts }), _jsx(KeymapBar, { entries: keymap })] }));
|
|
94
141
|
}
|
|
95
142
|
function cycleTab(current, reverse) {
|
|
96
143
|
const idx = TAB_ORDER.indexOf(current);
|
|
@@ -99,38 +146,4 @@ function cycleTab(current, reverse) {
|
|
|
99
146
|
: (idx + 1) % TAB_ORDER.length;
|
|
100
147
|
return TAB_ORDER[next] ?? "status";
|
|
101
148
|
}
|
|
102
|
-
function keymapForTab(tab) {
|
|
103
|
-
switch (tab) {
|
|
104
|
-
case "mcp":
|
|
105
|
-
return [
|
|
106
|
-
{ key: "↑↓", action: "navegar" },
|
|
107
|
-
{ key: "⏎", action: "acciones" },
|
|
108
|
-
{ key: "n", action: "nueva" },
|
|
109
|
-
];
|
|
110
|
-
case "skills":
|
|
111
|
-
return [
|
|
112
|
-
{ key: "↑↓", action: "navegar" },
|
|
113
|
-
{ key: "⏎", action: "acciones" },
|
|
114
|
-
];
|
|
115
|
-
case "update":
|
|
116
|
-
return [
|
|
117
|
-
{ key: "↑↓", action: "navegar" },
|
|
118
|
-
{ key: "⏎", action: "seleccionar" },
|
|
119
|
-
];
|
|
120
|
-
case "plugins":
|
|
121
|
-
return [
|
|
122
|
-
{ key: "↑↓", action: "navegar" },
|
|
123
|
-
{ key: "⏎", action: "acciones" },
|
|
124
|
-
{ key: "n", action: "nuevo" },
|
|
125
|
-
];
|
|
126
|
-
case "status":
|
|
127
|
-
return [];
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
function HelpOverlay() {
|
|
131
|
-
return (_jsxs(Box, { flexDirection: "column", marginTop: 1, borderStyle: "round", borderColor: colors.accent, paddingX: 2, paddingY: 1, children: [_jsx(Text, { color: colors.fg, bold: true, children: "Ayuda" }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Help, { label: "Tab / \u21E7Tab", desc: "cambiar tab" }), _jsx(Help, { label: "1 .. 5", desc: "ir a tab por n\u00FAmero" }), _jsx(Help, { label: "?", desc: "abrir/cerrar esta ayuda" }), _jsx(Help, { label: "q", desc: "salir del TUI" })] }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { color: colors.fgSubtle, bold: true, children: "MCP" }), _jsx(Help, { label: "\u2191\u2193", desc: "navegar conexiones" }), _jsx(Help, { label: "\u23CE", desc: "abrir men\u00FA de acciones de la conexi\u00F3n" }), _jsx(Help, { label: "\u2191\u2193 \u23CE", desc: "navegar el men\u00FA y aplicar" }), _jsx(Help, { label: "Esc", desc: "cerrar men\u00FA sin aplicar" }), _jsx(Help, { label: "n", desc: "registrar nueva conexi\u00F3n" })] }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { color: colors.fgSubtle, bold: true, children: "Skills" }), _jsx(Help, { label: "\u2191\u2193", desc: "navegar targets (Claude / Codex / Warp)" }), _jsx(Help, { label: "\u23CE", desc: "abrir men\u00FA de acciones del target" }), _jsx(Help, { label: "\u2191\u2193 \u23CE", desc: "navegar el men\u00FA y aplicar (instalar / desinstalar)" }), _jsx(Help, { label: "Esc", desc: "cerrar men\u00FA sin aplicar" })] }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { color: colors.fgSubtle, bold: true, children: "Plugins" }), _jsx(Help, { label: "\u2191\u2193", desc: "navegar plugins" }), _jsx(Help, { label: "\u23CE", desc: "abrir men\u00FA de acciones (clear / reload / install por host)" }), _jsx(Help, { label: "\u2191\u2193 \u23CE", desc: "navegar el men\u00FA y aplicar" }), _jsx(Help, { label: "Esc", desc: "cerrar men\u00FA sin aplicar" }), _jsx(Help, { label: "n", desc: "agregar nuevo plugin desde URL git (Warp/Agents)" })] }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: colors.fgMoreSubtle, children: "Esc cierra esta ventana." }) })] }));
|
|
132
|
-
}
|
|
133
|
-
function Help({ label, desc }) {
|
|
134
|
-
return (_jsxs(Box, { children: [_jsx(Text, { color: colors.accent, bold: true, children: label }), _jsx(Text, { color: colors.fgMoreSubtle, children: " " }), _jsx(Text, { color: colors.fgSubtle, children: desc })] }));
|
|
135
|
-
}
|
|
136
149
|
//# sourceMappingURL=app.js.map
|
package/dist/cli/tui/app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/cli/tui/app.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/cli/tui/app.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAIlE,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAoB,MAAM,4BAA4B,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAsB,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAgB,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAQ/D,MAAM,SAAS,GAAqB;IAClC,QAAQ;IACR,SAAS;IACT,KAAK;IACL,QAAQ;IACR,SAAS;IACT,QAAQ;CACA,CAAC;AAEX,2BAA2B;AAC3B,MAAM,UAAU,GAA0B;IACxC,GAAG,EAAE,QAAQ;IACb,GAAG,EAAE,SAAS;IACd,GAAG,EAAE,KAAK;IACV,GAAG,EAAE,QAAQ;IACb,GAAG,EAAE,SAAS;IACd,GAAG,EAAE,QAAQ;CACd,CAAC;AAEF,MAAM,SAAS,GAAgB,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC7D,MAAM,QAAQ,GAAgB,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;AAElE,MAAM,WAAW,GAAiC;IAChD,MAAM,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC7B,OAAO,EAAE;QACP,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE;QAChC,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE;QAC7C,SAAS;KACV;IACD,GAAG,EAAE;QACH,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE;QAChC,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE;QAC9C,SAAS;KACV;IACD,MAAM,EAAE;QACN,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE;QAChC,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE;QAC9C,SAAS;KACV;IACD,OAAO,EAAE;QACP,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE;QAChC,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE;QAC9B,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE;QAC/B,SAAS;KACV;IACD,MAAM,EAAE;QACN,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE;QAC7C,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE;QAC9B,SAAS;KACV;CACF,CAAC;AAQF,MAAM,UAAU,GAAG,CAAC,KAAe;IACjC,OAAO,CACL,KAAC,iBAAiB,cAChB,KAAC,QAAQ,OAAK,KAAK,GAAI,GACL,CACrB,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAY;IACpD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAQ,QAAQ,CAAC,CAAC;IAC5D,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAU,aAAa,CAAC,CAAC;IAC/D,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;IAC1B,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,YAAY,EAAE,CAAC;IAC/C,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,CAAC;IAEhD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,eAAe,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IAE5F,SAAS,CAAC,GAAG,EAAE;QACb,KAAK,CAAC,KAAK,IAAI,EAAE;YACf,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACpC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC,CAAC,EAAE,CAAC;IACP,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf;;;;OAIG;IACH,MAAM,SAAS,GAAG,WAAW,CAC3B,CAAC,EAAU,EAAE,QAAkC,EAAE,EAAE;QACjD,IAAI,EAAE,KAAK,cAAc,EAAE,CAAC;YAC1B,QAAQ,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;YAC1D,IAAI,EAAE,CAAC;YACP,OAAO;QACT,CAAC;QACD,IAAI,EAAE,KAAK,UAAU,EAAE,CAAC;YACtB,QAAQ,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;YACtD,IAAI,EAAE,CAAC;YACP,OAAO;QACT,CAAC;QACD,IAAI,EAAE,KAAK,MAAM,EAAE,CAAC;YAClB,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;YACxC,IAAI,EAAE,CAAC;YACP,OAAO;QACT,CAAC;QACD,IAAI,EAAE,KAAK,YAAY,EAAE,CAAC;YACxB,SAAS,CAAC;gBACR,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,YAAY;gBACnB,IAAI,EAAE,uCAAuC;aAC9C,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QACD,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;IACzC,CAAC,EACD,CAAC,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,CAC5B,CAAC;IAEF,QAAQ,CACN,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACb,IAAI,WAAW;YAAE,OAAO;QACxB,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YACnC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;YACxC,IAAI,EAAE,CAAC;YACP,OAAO;QACT,CAAC;QACD,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;YACZ,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC;YACrD,OAAO;QACT,CAAC;QACD,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,MAAM;YAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC,EACD,EAAE,QAAQ,EAAE,IAAI,EAAE,CACnB,CAAC;IAEF,MAAM,IAAI,GAA2B;QACnC,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE;QAC3C,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,EAAE;QAC9C,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE;QACrC,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE;QAC3C,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,EAAE;QAC7C,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE;KACzD,CAAC;IAEF,MAAM,MAAM,GAAG,WAAW,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IAE5C,OAAO,CACL,MAAC,WAAW,eACV,KAAC,MAAM,IAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,GAAI,EAC5E,KAAC,MAAM,IAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,GAAI,EAC3C,MAAC,GAAG,IAAC,SAAS,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,aAAa,EAAC,QAAQ,aAClE,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAC,SAAS,IAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,GAAI,CAAC,CAAC,CAAC,IAAI,EACvE,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,CACzB,KAAC,UAAU,IAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,GAAI,CACjE,CAAC,CAAC,CAAC,IAAI,EACP,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,KAAC,MAAM,IAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,GAAI,CAAC,CAAC,CAAC,IAAI,EACrF,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,CACxB,KAAC,SAAS,IAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,GAAI,CAC5D,CAAC,CAAC,CAAC,IAAI,EACP,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,CACxB,KAAC,SAAS,IACR,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,IAAI,EACd,OAAO,EAAE,SAAS,EAClB,eAAe,EAAE,GAAG,EAAE;4BACpB,QAAQ,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;4BACpD,IAAI,EAAE,CAAC;wBACT,CAAC,GACD,CACH,CAAC,CAAC,CAAC,IAAI,EACP,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,KAAC,UAAU,IAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,GAAI,CAAC,CAAC,CAAC,IAAI,IACtE,EACN,KAAC,UAAU,IAAC,MAAM,EAAE,MAAM,GAAI,EAC9B,KAAC,SAAS,IAAC,OAAO,EAAE,MAAM,GAAI,IAClB,CACf,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,OAAc,EAAE,OAAgB;IAChD,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,OAAO;QAClB,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC,MAAM;QACjD,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC;IACjC,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export interface CommandEntry {
|
|
2
|
+
id: string;
|
|
3
|
+
label: string;
|
|
4
|
+
/** Categoría (navegación / acción / proyecto / vista / sesión) */
|
|
5
|
+
ctx: string;
|
|
6
|
+
/** Glyph corto a la izquierda del label */
|
|
7
|
+
glyph: string;
|
|
8
|
+
}
|
|
9
|
+
export interface CommandPaletteProps {
|
|
10
|
+
/** Comandos disponibles para filtrar */
|
|
11
|
+
commands: readonly CommandEntry[];
|
|
12
|
+
/** Callback al ejecutar — recibe el `id` del comando seleccionado */
|
|
13
|
+
onRun: (id: string) => void;
|
|
14
|
+
/** Cierra el palette sin ejecutar */
|
|
15
|
+
onClose: () => void;
|
|
16
|
+
/** Si false, no consume input (cuando hay otro modal por encima) */
|
|
17
|
+
isActive?: boolean;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* CommandPalette — overlay tipo Ctrl+K.
|
|
21
|
+
*
|
|
22
|
+
* - TextInput de `@inkjs/ui` para filtrar (case-insensitive en `label` + `ctx`).
|
|
23
|
+
* - Lista filtrada con cursor; `↑↓` mueve, `⏎` ejecuta, `Esc` cierra.
|
|
24
|
+
* - Footer con hint de navegación y conteo de resultados.
|
|
25
|
+
*
|
|
26
|
+
* En TTY no hay backdrop translúcido — el componente se renderiza en el área
|
|
27
|
+
* de contenido en lugar de la tab activa cuando está abierto (app.tsx maneja
|
|
28
|
+
* esa conmutación).
|
|
29
|
+
*/
|
|
30
|
+
export declare function CommandPalette({ commands, onRun, onClose, isActive }: CommandPaletteProps): import("react/jsx-runtime").JSX.Element;
|
|
31
|
+
/**
|
|
32
|
+
* Catálogo canónico de comandos del TUI.
|
|
33
|
+
*
|
|
34
|
+
* Stable IDs porque app.tsx + hooks externos hacen pattern match contra ellos.
|
|
35
|
+
* Cuando un comando no aplica al contexto actual el handler debe responder
|
|
36
|
+
* con un toast (no romper).
|
|
37
|
+
*/
|
|
38
|
+
export declare const PALETTE_COMMANDS: readonly CommandEntry[];
|
|
39
|
+
//# sourceMappingURL=command-palette.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-palette.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/components/command-palette.tsx"],"names":[],"mappings":"AAKA,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,kEAAkE;IAClE,GAAG,EAAE,MAAM,CAAC;IACZ,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,wCAAwC;IACxC,QAAQ,EAAE,SAAS,YAAY,EAAE,CAAC;IAClC,qEAAqE;IACrE,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,qCAAqC;IACrC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,QAAe,EAAE,EAAE,mBAAmB,2CA2EhG;AAoBD;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,EAAE,SAAS,YAAY,EAiDnD,CAAC"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { TextInput } from "@inkjs/ui";
|
|
3
|
+
import { Box, Text, useInput } from "ink";
|
|
4
|
+
import { useMemo, useState } from "react";
|
|
5
|
+
import { colors, icons } from "../theme.js";
|
|
6
|
+
/**
|
|
7
|
+
* CommandPalette — overlay tipo Ctrl+K.
|
|
8
|
+
*
|
|
9
|
+
* - TextInput de `@inkjs/ui` para filtrar (case-insensitive en `label` + `ctx`).
|
|
10
|
+
* - Lista filtrada con cursor; `↑↓` mueve, `⏎` ejecuta, `Esc` cierra.
|
|
11
|
+
* - Footer con hint de navegación y conteo de resultados.
|
|
12
|
+
*
|
|
13
|
+
* En TTY no hay backdrop translúcido — el componente se renderiza en el área
|
|
14
|
+
* de contenido en lugar de la tab activa cuando está abierto (app.tsx maneja
|
|
15
|
+
* esa conmutación).
|
|
16
|
+
*/
|
|
17
|
+
export function CommandPalette({ commands, onRun, onClose, isActive = true }) {
|
|
18
|
+
const [query, setQuery] = useState("");
|
|
19
|
+
const [cursor, setCursor] = useState(0);
|
|
20
|
+
const filtered = useMemo(() => {
|
|
21
|
+
if (!query)
|
|
22
|
+
return commands;
|
|
23
|
+
const q = query.toLowerCase();
|
|
24
|
+
return commands.filter((c) => c.label.toLowerCase().includes(q) || c.ctx.toLowerCase().includes(q));
|
|
25
|
+
}, [query, commands]);
|
|
26
|
+
// Reset cursor cuando cambia el filtro — derivado, no necesita useEffect.
|
|
27
|
+
// (El cursor se ajusta al límite cuando `filtered.length` cambia.)
|
|
28
|
+
useInput((_input, key) => {
|
|
29
|
+
if (key.upArrow) {
|
|
30
|
+
setCursor((c) => Math.max(0, c - 1));
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
if (key.downArrow) {
|
|
34
|
+
setCursor((c) => Math.min(filtered.length - 1, c + 1));
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
if (key.escape) {
|
|
38
|
+
onClose();
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
if (key.return) {
|
|
42
|
+
const target = filtered[cursor];
|
|
43
|
+
if (target) {
|
|
44
|
+
onRun(target.id);
|
|
45
|
+
onClose();
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}, { isActive });
|
|
49
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsxs(Text, { color: colors.accent, bold: true, children: [icons.promptMark, " "] }), _jsx(Box, { flexGrow: 1, children: _jsx(TextInput, { isDisabled: !isActive, placeholder: "Buscar acci\u00F3n\u2026", onChange: (v) => {
|
|
50
|
+
setQuery(v);
|
|
51
|
+
setCursor(0);
|
|
52
|
+
}, onSubmit: () => {
|
|
53
|
+
const target = filtered[cursor];
|
|
54
|
+
if (target) {
|
|
55
|
+
onRun(target.id);
|
|
56
|
+
onClose();
|
|
57
|
+
}
|
|
58
|
+
} }) }), _jsx(Text, { color: colors.fgFaint, children: "esc" })] }), _jsx(Box, { flexDirection: "column", children: filtered.length === 0 ? (_jsx(Text, { color: colors.fgFaint, children: "(sin coincidencias)" })) : (filtered.map((c, i) => _jsx(CommandRow, { cmd: c, active: i === cursor }, c.id))) })] }));
|
|
59
|
+
}
|
|
60
|
+
function CommandRow({ cmd, active }) {
|
|
61
|
+
return (_jsxs(Box, { children: [_jsxs(Text, { color: active ? colors.accent : colors.fgFaint, bold: active, children: [active ? "› " : " ", cmd.glyph] }), _jsx(Text, { children: " " }), _jsx(Box, { flexGrow: 1, children: _jsx(Text, { color: active ? colors.fgBright : colors.fgSubtle, bold: active, children: cmd.label }) }), _jsx(Text, { color: colors.fgFaint, children: cmd.ctx })] }));
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Catálogo canónico de comandos del TUI.
|
|
65
|
+
*
|
|
66
|
+
* Stable IDs porque app.tsx + hooks externos hacen pattern match contra ellos.
|
|
67
|
+
* Cuando un comando no aplica al contexto actual el handler debe responder
|
|
68
|
+
* con un toast (no romper).
|
|
69
|
+
*/
|
|
70
|
+
export const PALETTE_COMMANDS = [
|
|
71
|
+
// navegación
|
|
72
|
+
{ id: "goto:status", label: "Ir a Status", ctx: "navegación", glyph: "›" },
|
|
73
|
+
{ id: "goto:project", label: "Ir a Proyecto", ctx: "navegación", glyph: "›" },
|
|
74
|
+
{ id: "goto:mcp", label: "Ir a MCP", ctx: "navegación", glyph: "›" },
|
|
75
|
+
{ id: "goto:skills", label: "Ir a Skills", ctx: "navegación", glyph: "›" },
|
|
76
|
+
{ id: "goto:plugins", label: "Ir a Plugins", ctx: "navegación", glyph: "›" },
|
|
77
|
+
{ id: "goto:update", label: "Ir a Update", ctx: "navegación", glyph: "›" },
|
|
78
|
+
// proyecto
|
|
79
|
+
{ id: "git:status", label: "Git status", ctx: "proyecto", glyph: "◆" },
|
|
80
|
+
{ id: "sessions:open", label: "Abrir sesión más reciente", ctx: "proyecto", glyph: "▸" },
|
|
81
|
+
{ id: "pending:next", label: "Saltar al próximo pendiente", ctx: "proyecto", glyph: "→" },
|
|
82
|
+
// acción (install/update/maintenance)
|
|
83
|
+
{ id: "install:all", label: "Install completa en todos los hosts", ctx: "acción", glyph: "↓" },
|
|
84
|
+
{
|
|
85
|
+
id: "uninstall:all",
|
|
86
|
+
label: "Uninstall completo en todos los hosts",
|
|
87
|
+
ctx: "acción",
|
|
88
|
+
glyph: "×",
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
id: "clean:cache",
|
|
92
|
+
label: "Limpiar cache de plugins (todos los hosts)",
|
|
93
|
+
ctx: "acción",
|
|
94
|
+
glyph: "⊘",
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
id: "legacy:clean",
|
|
98
|
+
label: "Limpiar skills legacy (qtc-*, agent-workflow-manager)",
|
|
99
|
+
ctx: "acción",
|
|
100
|
+
glyph: "⚒",
|
|
101
|
+
},
|
|
102
|
+
{ id: "update:check", label: "Buscar actualización del CLI", ctx: "acción", glyph: "↻" },
|
|
103
|
+
{ id: "mcp:new", label: "Nueva conexión MCP", ctx: "acción", glyph: "+" },
|
|
104
|
+
{ id: "mcp:test-all", label: "Probar todas las conexiones MCP", ctx: "acción", glyph: "▸" },
|
|
105
|
+
{ id: "plugins:refresh", label: "Refrescar lista de plugins", ctx: "acción", glyph: "↻" },
|
|
106
|
+
// vista
|
|
107
|
+
{
|
|
108
|
+
id: "toggle:density",
|
|
109
|
+
label: "Alternar densidad (cómodo ↔ compacto)",
|
|
110
|
+
ctx: "vista",
|
|
111
|
+
glyph: "↔",
|
|
112
|
+
},
|
|
113
|
+
// sesión
|
|
114
|
+
{ id: "quit", label: "Salir del TUI", ctx: "sesión", glyph: "⎋" },
|
|
115
|
+
];
|
|
116
|
+
//# sourceMappingURL=command-palette.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-palette.js","sourceRoot":"","sources":["../../../../src/cli/tui/components/command-palette.tsx"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,12 @@ export interface HeaderProps {
|
|
|
3
3
|
cwd?: string;
|
|
4
4
|
homeDir?: string;
|
|
5
5
|
}
|
|
6
|
+
/**
|
|
7
|
+
* Header — minimal chrome superior.
|
|
8
|
+
*
|
|
9
|
+
* Izquierda: diamante + name + version. Derecha: path corto.
|
|
10
|
+
* Sin "live indicator" — ruido innecesario.
|
|
11
|
+
*/
|
|
6
12
|
export declare function Header({ version, cwd, homeDir }: HeaderProps): import("react/jsx-runtime").JSX.Element;
|
|
7
13
|
export declare function prettyPath(cwd: string, homeDir?: string): string;
|
|
8
14
|
//# sourceMappingURL=header.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"header.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/components/header.tsx"],"names":[],"mappings":"AAGA,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"header.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/components/header.tsx"],"names":[],"mappings":"AAGA,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,WAAW,2CAe5D;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAMhE"}
|
|
@@ -1,9 +1,15 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Box, Text } from "ink";
|
|
3
3
|
import { colors, icons } from "../theme.js";
|
|
4
|
+
/**
|
|
5
|
+
* Header — minimal chrome superior.
|
|
6
|
+
*
|
|
7
|
+
* Izquierda: diamante + name + version. Derecha: path corto.
|
|
8
|
+
* Sin "live indicator" — ruido innecesario.
|
|
9
|
+
*/
|
|
4
10
|
export function Header({ version, cwd, homeDir }) {
|
|
5
11
|
const path = cwd ? prettyPath(cwd, homeDir) : undefined;
|
|
6
|
-
return (_jsxs(Box, { justifyContent: "space-between", marginBottom: 1, children: [_jsxs(Box, { children: [
|
|
12
|
+
return (_jsxs(Box, { justifyContent: "space-between", marginBottom: 1, children: [_jsxs(Box, { children: [_jsx(Text, { color: colors.accent, children: icons.brand }), _jsx(Text, { children: " " }), _jsx(Text, { color: colors.fgBright, bold: true, children: "agent-workflow" }), _jsxs(Text, { color: colors.fgFaint, children: [" v", version] })] }), path ? _jsx(Text, { color: colors.fgMoreSubtle, children: path }) : null] }));
|
|
7
13
|
}
|
|
8
14
|
export function prettyPath(cwd, homeDir) {
|
|
9
15
|
if (homeDir && cwd.startsWith(homeDir)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"header.js","sourceRoot":"","sources":["../../../../src/cli/tui/components/header.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAQ5C,MAAM,UAAU,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAe;IAC3D,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACxD,OAAO,CACL,MAAC,GAAG,IAAC,cAAc,EAAC,eAAe,EAAC,YAAY,EAAE,CAAC,aACjD,MAAC,GAAG,eACF,
|
|
1
|
+
{"version":3,"file":"header.js","sourceRoot":"","sources":["../../../../src/cli/tui/components/header.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAQ5C;;;;;GAKG;AACH,MAAM,UAAU,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAe;IAC3D,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACxD,OAAO,CACL,MAAC,GAAG,IAAC,cAAc,EAAC,eAAe,EAAC,YAAY,EAAE,CAAC,aACjD,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,YAAG,KAAK,CAAC,KAAK,GAAQ,EAChD,KAAC,IAAI,oBAAS,EACd,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,IAAI,qCAE3B,EACP,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,OAAO,mBAAK,OAAO,IAAQ,IAC3C,EACL,IAAI,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,YAAY,YAAG,IAAI,GAAQ,CAAC,CAAC,CAAC,IAAI,IAC1D,CACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAW,EAAE,OAAgB;IACtD,IAAI,OAAO,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACvC,OAAO,IAAI,IAAI,EAAE,CAAC;IACpB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type HostMeta } from "../hosts.js";
|
|
2
|
+
export interface HostChipProps {
|
|
3
|
+
/** id del host del registry */
|
|
4
|
+
id: string;
|
|
5
|
+
/** true = host instalado / activo */
|
|
6
|
+
on?: boolean;
|
|
7
|
+
/** override de display (overrides host.glyph) */
|
|
8
|
+
glyph?: string;
|
|
9
|
+
/** sólo "sm" por defecto en TTY; "md" agrega padding lateral */
|
|
10
|
+
size?: "xs" | "sm" | "md";
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* HostChip — glyph compacto de 1 letra que indica un host.
|
|
14
|
+
* En TTY no hay fondos arbitrarios; usamos `backgroundColor` de Ink (que el
|
|
15
|
+
* renderer adapta al terminal) y color de letra. Cuando `on=false` el chip
|
|
16
|
+
* pierde el fill verde y vuelve a hueso (muted).
|
|
17
|
+
*/
|
|
18
|
+
export declare function HostChip({ id, on, glyph, size }: HostChipProps): import("react/jsx-runtime").JSX.Element;
|
|
19
|
+
/**
|
|
20
|
+
* HostChipStrip — todos los hosts del registry como chips, en línea.
|
|
21
|
+
* Los `active` reciben color de "on", el resto queda en "off".
|
|
22
|
+
*/
|
|
23
|
+
export declare function HostChipStrip({ active, size, hosts, }: {
|
|
24
|
+
active: readonly string[];
|
|
25
|
+
size?: "xs" | "sm" | "md";
|
|
26
|
+
hosts?: readonly HostMeta[];
|
|
27
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
28
|
+
//# sourceMappingURL=host-chip.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host-chip.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/components/host-chip.tsx"],"names":[],"mappings":"AACA,OAAO,EAAS,KAAK,QAAQ,EAAY,MAAM,aAAa,CAAC;AAG7D,MAAM,WAAW,aAAa;IAC5B,+BAA+B;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,qCAAqC;IACrC,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gEAAgE;IAChE,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;CAC3B;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAS,EAAE,KAAK,EAAE,IAAW,EAAE,EAAE,aAAa,2CAe5E;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,IAAW,EACX,KAAa,GACd,EAAE;IACD,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,KAAK,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAC;CAC7B,2CAWA"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from "ink";
|
|
3
|
+
import { HOSTS, hostMeta } from "../hosts.js";
|
|
4
|
+
import { colors } from "../theme.js";
|
|
5
|
+
/**
|
|
6
|
+
* HostChip — glyph compacto de 1 letra que indica un host.
|
|
7
|
+
* En TTY no hay fondos arbitrarios; usamos `backgroundColor` de Ink (que el
|
|
8
|
+
* renderer adapta al terminal) y color de letra. Cuando `on=false` el chip
|
|
9
|
+
* pierde el fill verde y vuelve a hueso (muted).
|
|
10
|
+
*/
|
|
11
|
+
export function HostChip({ id, on = true, glyph, size = "sm" }) {
|
|
12
|
+
const meta = hostMeta(id);
|
|
13
|
+
const ch = glyph ?? meta.glyph;
|
|
14
|
+
if (on) {
|
|
15
|
+
return (_jsx(Text, { color: colors.success, bold: true, children: wrap(ch, size) }));
|
|
16
|
+
}
|
|
17
|
+
return (_jsx(Text, { color: colors.fgFaint, dimColor: true, children: wrap(ch, size) }));
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* HostChipStrip — todos los hosts del registry como chips, en línea.
|
|
21
|
+
* Los `active` reciben color de "on", el resto queda en "off".
|
|
22
|
+
*/
|
|
23
|
+
export function HostChipStrip({ active, size = "sm", hosts = HOSTS, }) {
|
|
24
|
+
const onSet = new Set(active);
|
|
25
|
+
return (_jsx(Box, { children: hosts.map((h, idx) => (_jsx(Box, { marginLeft: idx === 0 ? 0 : 1, children: _jsx(HostChip, { id: h.id, on: onSet.has(h.id), size: size }) }, h.id))) }));
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Render del chip — en TTY usamos `[X]` para md, `X` solo para sm/xs.
|
|
29
|
+
*/
|
|
30
|
+
function wrap(ch, size) {
|
|
31
|
+
if (size === "md")
|
|
32
|
+
return `[${ch}]`;
|
|
33
|
+
return ch;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=host-chip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host-chip.js","sourceRoot":"","sources":["../../../../src/cli/tui/components/host-chip.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,KAAK,EAAiB,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAarC;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,IAAI,EAAiB;IAC3E,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC1B,MAAM,EAAE,GAAG,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC;IAC/B,IAAI,EAAE,EAAE,CAAC;QACP,OAAO,CACL,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,kBAC9B,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,GACV,CACR,CAAC;IACJ,CAAC;IACD,OAAO,CACL,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,kBAClC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,GACV,CACR,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,EAC5B,MAAM,EACN,IAAI,GAAG,IAAI,EACX,KAAK,GAAG,KAAK,GAKd;IACC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B,OAAO,CACL,KAAC,GAAG,cACD,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CACrB,KAAC,GAAG,IAAY,UAAU,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAC3C,KAAC,QAAQ,IAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,GAAI,IAD/C,CAAC,CAAC,EAAE,CAER,CACP,CAAC,GACE,CACP,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,IAAI,CAAC,EAAU,EAAE,IAAwB;IAChD,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,IAAI,EAAE,GAAG,CAAC;IACpC,OAAO,EAAE,CAAC;AACZ,CAAC"}
|