rax-flow 0.1.6 → 0.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin.js +3 -2
- package/dist/bin.js.map +1 -1
- package/dist/tui/App.d.ts +2 -0
- package/dist/tui/App.d.ts.map +1 -0
- package/dist/tui/App.js +63 -0
- package/dist/tui/App.js.map +1 -0
- package/dist/tui/components/ChatPanel.d.ts +15 -0
- package/dist/tui/components/ChatPanel.d.ts.map +1 -0
- package/dist/tui/components/ChatPanel.js +31 -0
- package/dist/tui/components/ChatPanel.js.map +1 -0
- package/dist/tui/components/DAGPanel.d.ts +24 -0
- package/dist/tui/components/DAGPanel.d.ts.map +1 -0
- package/dist/tui/components/DAGPanel.js +30 -0
- package/dist/tui/components/DAGPanel.js.map +1 -0
- package/dist/tui/components/Header.d.ts +11 -0
- package/dist/tui/components/Header.d.ts.map +1 -0
- package/dist/tui/components/Header.js +25 -0
- package/dist/tui/components/Header.js.map +1 -0
- package/dist/tui/components/HelpOverlay.d.ts +6 -0
- package/dist/tui/components/HelpOverlay.d.ts.map +1 -0
- package/dist/tui/components/HelpOverlay.js +42 -0
- package/dist/tui/components/HelpOverlay.js.map +1 -0
- package/dist/tui/components/InputBar.d.ts +8 -0
- package/dist/tui/components/InputBar.d.ts.map +1 -0
- package/dist/tui/components/InputBar.js +16 -0
- package/dist/tui/components/InputBar.js.map +1 -0
- package/dist/tui/components/StatusPanel.d.ts +21 -0
- package/dist/tui/components/StatusPanel.d.ts.map +1 -0
- package/dist/tui/components/StatusPanel.js +21 -0
- package/dist/tui/components/StatusPanel.js.map +1 -0
- package/dist/tui/hooks/useAppState.d.ts +55 -0
- package/dist/tui/hooks/useAppState.d.ts.map +1 -0
- package/dist/tui/hooks/useAppState.js +190 -0
- package/dist/tui/hooks/useAppState.js.map +1 -0
- package/dist/tui/index.d.ts +3 -0
- package/dist/tui/index.d.ts.map +1 -0
- package/dist/tui/index.js +8 -0
- package/dist/tui/index.js.map +1 -0
- package/package.json +7 -1
- package/src/bin.ts +3 -2
- package/src/tui/App.tsx +113 -0
- package/src/tui/components/ChatPanel.tsx +83 -0
- package/src/tui/components/DAGPanel.tsx +116 -0
- package/src/tui/components/Header.tsx +76 -0
- package/src/tui/components/HelpOverlay.tsx +83 -0
- package/src/tui/components/InputBar.tsx +55 -0
- package/src/tui/components/StatusPanel.tsx +90 -0
- package/src/tui/hooks/useAppState.ts +264 -0
- package/src/tui/index.ts +9 -0
- package/tsconfig.json +0 -4
- package/tsconfig.tsbuildinfo +1 -1
package/dist/bin.js
CHANGED
|
@@ -7,7 +7,7 @@ import { runDoctor } from "./doctor.js";
|
|
|
7
7
|
import { runInitHost } from "./init-host.js";
|
|
8
8
|
import { runWorkflow } from "./run.js";
|
|
9
9
|
import { runDashboard } from "./dashboard.js";
|
|
10
|
-
import {
|
|
10
|
+
import { startHubOneShot } from "./hub/index.js";
|
|
11
11
|
function getFlag(args, flag) {
|
|
12
12
|
const index = args.indexOf(flag);
|
|
13
13
|
if (index === -1)
|
|
@@ -19,7 +19,8 @@ async function main() {
|
|
|
19
19
|
const command = args[0];
|
|
20
20
|
// Mode hub interactif (défaut) - sans arguments ou avec 'hub'
|
|
21
21
|
if (!command || command === "hub") {
|
|
22
|
-
|
|
22
|
+
const { startTUI } = await import("./tui/index.js");
|
|
23
|
+
startTUI();
|
|
23
24
|
return;
|
|
24
25
|
}
|
|
25
26
|
// Mode one-shot
|
package/dist/bin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../src/tui/App.tsx"],"names":[],"mappings":"AAYA,wBAAgB,GAAG,4CAoGlB"}
|
package/dist/tui/App.js
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useEffect } from "react";
|
|
3
|
+
import { Box, useApp, useInput } from "ink";
|
|
4
|
+
import { Header } from "./components/Header.js";
|
|
5
|
+
import { ChatPanel } from "./components/ChatPanel.js";
|
|
6
|
+
import { StatusPanel } from "./components/StatusPanel.js";
|
|
7
|
+
import { DAGPanel } from "./components/DAGPanel.js";
|
|
8
|
+
import { InputBar } from "./components/InputBar.js";
|
|
9
|
+
import { HelpOverlay } from "./components/HelpOverlay.js";
|
|
10
|
+
import { useAppState } from "./hooks/useAppState.js";
|
|
11
|
+
export function App() {
|
|
12
|
+
const { exit } = useApp();
|
|
13
|
+
const { state, processCommand } = useAppState();
|
|
14
|
+
const [activePanel, setActivePanel] = useState("chat");
|
|
15
|
+
const [showHelp, setShowHelp] = useState(false);
|
|
16
|
+
const [tick, setTick] = useState(0);
|
|
17
|
+
useEffect(() => {
|
|
18
|
+
const interval = setInterval(() => {
|
|
19
|
+
setTick((t) => t + 1);
|
|
20
|
+
}, 100);
|
|
21
|
+
return () => clearInterval(interval);
|
|
22
|
+
}, []);
|
|
23
|
+
useInput((input, key) => {
|
|
24
|
+
if (key.ctrl && input === "c") {
|
|
25
|
+
exit();
|
|
26
|
+
}
|
|
27
|
+
if (key.ctrl && input === "d") {
|
|
28
|
+
exit();
|
|
29
|
+
}
|
|
30
|
+
if (key.escape) {
|
|
31
|
+
setShowHelp(false);
|
|
32
|
+
}
|
|
33
|
+
if (input === "?" && !showHelp) {
|
|
34
|
+
setShowHelp(true);
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
if (showHelp)
|
|
38
|
+
return;
|
|
39
|
+
if (key.return && input === "") {
|
|
40
|
+
}
|
|
41
|
+
if (key.tab) {
|
|
42
|
+
const panels = ["chat", "dag", "status"];
|
|
43
|
+
const currentIndex = panels.indexOf(activePanel);
|
|
44
|
+
setActivePanel(panels[(currentIndex + 1) % panels.length]);
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
const handleSubmit = (input) => {
|
|
48
|
+
const trimmed = input.trim();
|
|
49
|
+
if (!trimmed)
|
|
50
|
+
return;
|
|
51
|
+
if (trimmed === "exit" || trimmed === "quit") {
|
|
52
|
+
exit();
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
if (trimmed === "?" || trimmed === "/help") {
|
|
56
|
+
setShowHelp(!showHelp);
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
processCommand(trimmed);
|
|
60
|
+
};
|
|
61
|
+
return (_jsxs(Box, { flexDirection: "column", height: "100%", width: "100%", children: [_jsx(Header, { projectName: state.projectName, agentCount: state.agentCount, provider: state.provider, status: state.status, tick: tick, activePanel: activePanel }), showHelp ? (_jsx(HelpOverlay, { onDismiss: () => setShowHelp(false) })) : (_jsxs(_Fragment, { children: [_jsxs(Box, { flexGrow: 1, flexDirection: "row", width: "100%", children: [_jsx(ChatPanel, { messages: state.messages, isProcessing: state.isProcessing, isActive: activePanel === "chat" }), _jsx(DAGPanel, { workflowState: state.workflowState, tick: tick, isActive: activePanel === "dag" }), _jsx(StatusPanel, { agents: state.agents, providers: state.providers, fitness: state.fitness, currentWorkflow: state.currentWorkflow, isActive: activePanel === "status" })] }), _jsx(InputBar, { onSubmit: handleSubmit, suggestions: state.suggestions, isProcessing: state.isProcessing })] }))] }));
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=App.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"App.js","sourceRoot":"","sources":["../../src/tui/App.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
interface Message {
|
|
2
|
+
id: string;
|
|
3
|
+
type: "user" | "system" | "agent" | "error" | "success";
|
|
4
|
+
content: string;
|
|
5
|
+
timestamp: Date;
|
|
6
|
+
agent?: string;
|
|
7
|
+
}
|
|
8
|
+
interface ChatPanelProps {
|
|
9
|
+
messages: Message[];
|
|
10
|
+
isProcessing: boolean;
|
|
11
|
+
isActive: boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare function ChatPanel({ messages, isProcessing, isActive }: ChatPanelProps): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=ChatPanel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChatPanel.d.ts","sourceRoot":"","sources":["../../../src/tui/components/ChatPanel.tsx"],"names":[],"mappings":"AAGA,UAAU,OAAO;IACf,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,CAAC;IACxD,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,cAAc;IACtB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAuCD,wBAAgB,SAAS,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,EAAE,cAAc,2CA4B7E"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from "ink";
|
|
3
|
+
function formatTime(date) {
|
|
4
|
+
return date.toLocaleTimeString("fr-FR", {
|
|
5
|
+
hour: "2-digit",
|
|
6
|
+
minute: "2-digit",
|
|
7
|
+
second: "2-digit",
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
function MessageItem({ message }) {
|
|
11
|
+
const typeColors = {
|
|
12
|
+
user: "cyan",
|
|
13
|
+
system: "gray",
|
|
14
|
+
agent: "#f97316",
|
|
15
|
+
error: "red",
|
|
16
|
+
success: "green",
|
|
17
|
+
};
|
|
18
|
+
const typeLabels = {
|
|
19
|
+
user: "YOU",
|
|
20
|
+
system: "SYS",
|
|
21
|
+
agent: message.agent || "AGENT",
|
|
22
|
+
error: "ERR",
|
|
23
|
+
success: "OK",
|
|
24
|
+
};
|
|
25
|
+
return (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { color: "gray", dimColor: true, children: ["[", formatTime(message.timestamp), "]"] }), _jsxs(Text, { color: typeColors[message.type], bold: true, children: [" [", typeLabels[message.type], "]"] }), message.agent && _jsxs(Text, { color: "gray", children: [" [", message.agent, "]"] })] }), _jsx(Text, { color: "white", children: message.content })] }));
|
|
26
|
+
}
|
|
27
|
+
export function ChatPanel({ messages, isProcessing, isActive }) {
|
|
28
|
+
const borderColor = isActive ? "#f97316" : "gray";
|
|
29
|
+
return (_jsxs(Box, { flexDirection: "column", flexGrow: 2, borderStyle: "single", borderColor: borderColor, paddingX: 1, children: [_jsxs(Box, { borderStyle: "single", borderColor: "#f97316", marginBottom: 1, children: [_jsx(Text, { color: "#f97316", bold: true, children: "CHAT" }), _jsx(Text, { color: "gray", children: " \u2014 Tapez /help pour les commandes" }), isActive && _jsx(Text, { color: "yellow", children: " [ACTIF]" })] }), _jsxs(Box, { flexDirection: "column", flexGrow: 1, overflow: "hidden", children: [messages.slice(-15).map((msg) => (_jsx(MessageItem, { message: msg }, msg.id))), isProcessing && (_jsx(Box, { children: _jsx(Text, { color: "yellow", children: "\u25CF Processing..." }) }))] })] }));
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=ChatPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChatPanel.js","sourceRoot":"","sources":["../../../src/tui/components/ChatPanel.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAgBhC,SAAS,UAAU,CAAC,IAAU;IAC5B,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE;QACtC,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,SAAS;KAClB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,WAAW,CAAC,EAAE,OAAO,EAAwB;IACpD,MAAM,UAAU,GAA2B;QACzC,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,MAAM;QACd,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,KAAK;QACZ,OAAO,EAAE,OAAO;KACjB,CAAC;IAEF,MAAM,UAAU,GAA2B;QACzC,IAAI,EAAE,KAAK;QACX,MAAM,EAAE,KAAK;QACb,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,OAAO;QAC/B,KAAK,EAAE,KAAK;QACZ,OAAO,EAAE,IAAI;KACd,CAAC;IAEF,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,YAAY,EAAE,CAAC,aACzC,MAAC,GAAG,IAAC,aAAa,EAAC,KAAK,aACtB,MAAC,IAAI,IAAC,KAAK,EAAC,MAAM,EAAC,QAAQ,wBAAG,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,EACpE,MAAC,IAAI,IAAC,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,yBAAI,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAC/E,OAAO,CAAC,KAAK,IAAI,MAAC,IAAI,IAAC,KAAK,EAAC,MAAM,mBAAI,OAAO,CAAC,KAAK,SAAS,IAC1D,EACN,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,YAAE,OAAO,CAAC,OAAO,GAAQ,IACxC,CACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAkB;IAC5E,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;IAElD,OAAO,CACL,MAAC,GAAG,IACF,aAAa,EAAC,QAAQ,EACtB,QAAQ,EAAE,CAAC,EACX,WAAW,EAAC,QAAQ,EACpB,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,CAAC,aAEX,MAAC,GAAG,IAAC,WAAW,EAAC,QAAQ,EAAC,WAAW,EAAC,SAAS,EAAC,YAAY,EAAE,CAAC,aAC7D,KAAC,IAAI,IAAC,KAAK,EAAC,SAAS,EAAC,IAAI,2BAAY,EACtC,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,uDAAyC,EAC1D,QAAQ,IAAI,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,yBAAgB,IAC7C,EACN,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAC,QAAQ,aACvD,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAChC,KAAC,WAAW,IAAc,OAAO,EAAE,GAAG,IAApB,GAAG,CAAC,EAAE,CAAkB,CAC3C,CAAC,EACD,YAAY,IAAI,CACf,KAAC,GAAG,cACF,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,qCAAuB,GACvC,CACP,IACG,IACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
interface DAGNode {
|
|
2
|
+
id: string;
|
|
3
|
+
name: string;
|
|
4
|
+
status: "pending" | "running" | "done" | "error";
|
|
5
|
+
agent?: string;
|
|
6
|
+
}
|
|
7
|
+
interface DAGLevel {
|
|
8
|
+
name: string;
|
|
9
|
+
progress: number;
|
|
10
|
+
nodes: DAGNode[];
|
|
11
|
+
}
|
|
12
|
+
interface WorkflowState {
|
|
13
|
+
levels: DAGLevel[];
|
|
14
|
+
currentLevel: number;
|
|
15
|
+
totalProgress: number;
|
|
16
|
+
}
|
|
17
|
+
interface DAGPanelProps {
|
|
18
|
+
workflowState: WorkflowState;
|
|
19
|
+
tick: number;
|
|
20
|
+
isActive: boolean;
|
|
21
|
+
}
|
|
22
|
+
export declare function DAGPanel({ workflowState, tick, isActive }: DAGPanelProps): import("react/jsx-runtime").JSX.Element;
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=DAGPanel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DAGPanel.d.ts","sourceRoot":"","sources":["../../../src/tui/components/DAGPanel.tsx"],"names":[],"mappings":"AAGA,UAAU,OAAO;IACf,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,QAAQ;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,EAAE,CAAC;CAClB;AAED,UAAU,aAAa;IACrB,MAAM,EAAE,QAAQ,EAAE,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,UAAU,aAAa;IACrB,aAAa,EAAE,aAAa,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;CACnB;AAuDD,wBAAgB,QAAQ,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,aAAa,2CAkCxE"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from "ink";
|
|
3
|
+
const statusIcons = {
|
|
4
|
+
pending: { icon: "○", color: "gray" },
|
|
5
|
+
running: { icon: "▶", color: "yellow" },
|
|
6
|
+
done: { icon: "●", color: "green" },
|
|
7
|
+
error: { icon: "✗", color: "red" },
|
|
8
|
+
};
|
|
9
|
+
const spinnerFrames = ["◐", "◓", "◑", "◒"];
|
|
10
|
+
function ProgressBar({ progress, width = 20 }) {
|
|
11
|
+
const filled = Math.round((progress / 100) * width);
|
|
12
|
+
const empty = width - filled;
|
|
13
|
+
const bar = "█".repeat(filled) + "░".repeat(empty);
|
|
14
|
+
return (_jsx(Text, { color: progress >= 100 ? "green" : progress > 0 ? "yellow" : "gray", children: bar }));
|
|
15
|
+
}
|
|
16
|
+
function DAGNodeItem({ node, tick }) {
|
|
17
|
+
const { icon, color } = statusIcons[node.status];
|
|
18
|
+
const animatedIcon = node.status === "running"
|
|
19
|
+
? spinnerFrames[tick % spinnerFrames.length]
|
|
20
|
+
: icon;
|
|
21
|
+
return (_jsxs(Box, { flexDirection: "row", marginLeft: 2, children: [_jsx(Text, { color: color, children: animatedIcon }), _jsxs(Text, { color: "white", children: [" ", node.name] }), node.agent && _jsxs(Text, { color: "gray", children: [" [", node.agent, "]"] })] }));
|
|
22
|
+
}
|
|
23
|
+
function DAGLevelView({ level, tick, isActive }) {
|
|
24
|
+
return (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { color: isActive ? "#f97316" : "gray", bold: isActive, children: level.name }), _jsx(Text, { color: "gray", children: " " }), _jsx(ProgressBar, { progress: level.progress, width: 12 }), _jsxs(Text, { color: "gray", children: [" ", level.progress, "%"] })] }), level.nodes.map((node) => (_jsx(DAGNodeItem, { node: node, tick: tick }, node.id)))] }));
|
|
25
|
+
}
|
|
26
|
+
export function DAGPanel({ workflowState, tick, isActive }) {
|
|
27
|
+
const borderColor = isActive ? "#f97316" : "gray";
|
|
28
|
+
return (_jsxs(Box, { flexDirection: "column", width: 40, borderStyle: "single", borderColor: borderColor, paddingX: 1, children: [_jsxs(Box, { borderStyle: "single", borderColor: "#f97316", marginBottom: 1, children: [_jsx(Text, { color: "#f97316", bold: true, children: "DAG" }), _jsx(Text, { color: "gray", children: " EXECUTION" })] }), _jsx(Box, { flexDirection: "column", flexGrow: 1, children: workflowState.levels.map((level, index) => (_jsx(DAGLevelView, { level: level, tick: tick, isActive: index === workflowState.currentLevel }, level.name))) }), _jsxs(Box, { borderStyle: "single", borderColor: "gray", marginTop: 1, children: [_jsx(Text, { color: "gray", children: "Total: " }), _jsx(ProgressBar, { progress: workflowState.totalProgress, width: 10 }), _jsxs(Text, { color: "white", children: [" ", workflowState.totalProgress, "%"] })] })] }));
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=DAGPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DAGPanel.js","sourceRoot":"","sources":["../../../src/tui/components/DAGPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
interface HeaderProps {
|
|
2
|
+
projectName: string;
|
|
3
|
+
agentCount: number;
|
|
4
|
+
provider: string;
|
|
5
|
+
status: "ready" | "running" | "error";
|
|
6
|
+
tick: number;
|
|
7
|
+
activePanel: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function Header({ projectName, agentCount, provider, status, tick, activePanel }: HeaderProps): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=Header.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Header.d.ts","sourceRoot":"","sources":["../../../src/tui/components/Header.tsx"],"names":[],"mappings":"AAGA,UAAU,WAAW;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AASD,wBAAgB,MAAM,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,WAAW,2CAwDnG"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from "ink";
|
|
3
|
+
const spinnerFrames = ["◐", "◓", "◑", "◒"];
|
|
4
|
+
const panelNames = {
|
|
5
|
+
chat: "CHAT",
|
|
6
|
+
dag: "DAG",
|
|
7
|
+
status: "STATUS",
|
|
8
|
+
};
|
|
9
|
+
export function Header({ projectName, agentCount, provider, status, tick, activePanel }) {
|
|
10
|
+
const statusColors = {
|
|
11
|
+
ready: "green",
|
|
12
|
+
running: "yellow",
|
|
13
|
+
error: "red",
|
|
14
|
+
};
|
|
15
|
+
const statusText = {
|
|
16
|
+
ready: "READY",
|
|
17
|
+
running: "RUNNING",
|
|
18
|
+
error: "ERROR",
|
|
19
|
+
};
|
|
20
|
+
const animatedStatus = status === "running"
|
|
21
|
+
? spinnerFrames[tick % spinnerFrames.length]
|
|
22
|
+
: status === "error" ? "✗" : "●";
|
|
23
|
+
return (_jsxs(Box, { flexDirection: "column", borderStyle: "single", borderColor: "gray", width: "100%", children: [_jsxs(Box, { flexDirection: "row", justifyContent: "space-between", alignItems: "center", paddingX: 1, children: [_jsxs(Box, { flexDirection: "row", alignItems: "center", children: [_jsx(Text, { color: "#f97316", bold: true, children: "\u25A0" }), _jsx(Text, { color: "white", bold: true, children: " RAX-FLOW" }), _jsx(Text, { color: "gray", children: " HUB" })] }), _jsxs(Box, { flexDirection: "row", alignItems: "center", children: [_jsx(Text, { color: "gray", children: "Project:" }), _jsxs(Text, { color: "cyan", children: [" ", projectName] }), _jsx(Text, { color: "gray", children: " \u2502 Agents:" }), _jsxs(Text, { color: "green", children: [" ", agentCount, "/12"] }), _jsxs(Text, { color: "gray", children: [" \u2502 [", provider, "]"] }), _jsxs(Text, { color: statusColors[status], children: [" ", animatedStatus, " ", statusText[status]] })] })] }), _jsxs(Box, { flexDirection: "row", paddingX: 1, children: [["chat", "dag", "status"].map((panel) => (_jsx(Box, { marginRight: 2, children: _jsxs(Text, { color: activePanel === panel ? "#f97316" : "gray", bold: activePanel === panel, children: ["[", panelNames[panel], "]"] }) }, panel))), _jsx(Text, { color: "gray", children: "| Tab: Changer \u2502 ?: Aide \u2502 Ctrl+C: Quitter" })] })] }));
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=Header.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Header.js","sourceRoot":"","sources":["../../../src/tui/components/Header.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAWhC,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAC3C,MAAM,UAAU,GAA2B;IACzC,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,KAAK;IACV,MAAM,EAAE,QAAQ;CACjB,CAAC;AAEF,MAAM,UAAU,MAAM,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAe;IAClG,MAAM,YAAY,GAAG;QACnB,KAAK,EAAE,OAAO;QACd,OAAO,EAAE,QAAQ;QACjB,KAAK,EAAE,KAAK;KACb,CAAC;IAEF,MAAM,UAAU,GAAG;QACjB,KAAK,EAAE,OAAO;QACd,OAAO,EAAE,SAAS;QAClB,KAAK,EAAE,OAAO;KACf,CAAC;IAEF,MAAM,cAAc,GAAG,MAAM,KAAK,SAAS;QACzC,CAAC,CAAC,aAAa,CAAC,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC;QAC5C,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAEnC,OAAO,CACL,MAAC,GAAG,IACF,aAAa,EAAC,QAAQ,EACtB,WAAW,EAAC,QAAQ,EACpB,WAAW,EAAC,MAAM,EAClB,KAAK,EAAC,MAAM,aAEZ,MAAC,GAAG,IACF,aAAa,EAAC,KAAK,EACnB,cAAc,EAAC,eAAe,EAC9B,UAAU,EAAC,QAAQ,EACnB,QAAQ,EAAE,CAAC,aAEX,MAAC,GAAG,IAAC,aAAa,EAAC,KAAK,EAAC,UAAU,EAAC,QAAQ,aAC1C,KAAC,IAAI,IAAC,KAAK,EAAC,SAAS,EAAC,IAAI,6BAAS,EACnC,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,EAAC,IAAI,gCAAiB,EACzC,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,qBAAY,IAC1B,EACN,MAAC,GAAG,IAAC,aAAa,EAAC,KAAK,EAAC,UAAU,EAAC,QAAQ,aAC1C,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,yBAAgB,EAClC,MAAC,IAAI,IAAC,KAAK,EAAC,MAAM,kBAAG,WAAW,IAAQ,EACxC,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,gCAAkB,EACpC,MAAC,IAAI,IAAC,KAAK,EAAC,OAAO,kBAAG,UAAU,WAAW,EAC3C,MAAC,IAAI,IAAC,KAAK,EAAC,MAAM,0BAAM,QAAQ,SAAS,EACzC,MAAC,IAAI,IAAC,KAAK,EAAE,YAAY,CAAC,MAAM,CAAC,kBAAI,cAAc,OAAG,UAAU,CAAC,MAAM,CAAC,IAAQ,IAC5E,IACF,EACN,MAAC,GAAG,IAAC,aAAa,EAAC,KAAK,EAAC,QAAQ,EAAE,CAAC,aAChC,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CACnD,KAAC,GAAG,IAAa,WAAW,EAAE,CAAC,YAC7B,MAAC,IAAI,IAAC,KAAK,EAAE,WAAW,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,WAAW,KAAK,KAAK,kBAChF,UAAU,CAAC,KAAK,CAAC,SACd,IAHC,KAAK,CAIT,CACP,CAAC,EACF,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,qEAAkD,IAChE,IACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HelpOverlay.d.ts","sourceRoot":"","sources":["../../../src/tui/components/HelpOverlay.tsx"],"names":[],"mappings":"AAGA,UAAU,gBAAgB;IACxB,SAAS,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,wBAAgB,WAAW,CAAC,EAAE,SAAS,EAAE,EAAE,gBAAgB,2CA2E1D"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text, useInput } from "ink";
|
|
3
|
+
export function HelpOverlay({ onDismiss }) {
|
|
4
|
+
useInput((input, key) => {
|
|
5
|
+
if (key.escape || input === "q") {
|
|
6
|
+
onDismiss();
|
|
7
|
+
}
|
|
8
|
+
});
|
|
9
|
+
const sections = [
|
|
10
|
+
{
|
|
11
|
+
title: "COMMANDES",
|
|
12
|
+
items: [
|
|
13
|
+
["/run <prompt>", "Exécuter un workflow"],
|
|
14
|
+
["/status", "État du système"],
|
|
15
|
+
["/agents", "Liste des agents"],
|
|
16
|
+
["/providers", "Liste des providers"],
|
|
17
|
+
["/workflows", "Blueprints disponibles"],
|
|
18
|
+
["/help, ?", "Cette aide"],
|
|
19
|
+
["/exit", "Quitter"],
|
|
20
|
+
],
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
title: "NAVIGATION",
|
|
24
|
+
items: [
|
|
25
|
+
["Tab", "Changer de panel actif"],
|
|
26
|
+
["F1-F8", "Aller au panel spécifique"],
|
|
27
|
+
["Ctrl+C", "Quitter"],
|
|
28
|
+
["Esc", "Fermer l'aide"],
|
|
29
|
+
],
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
title: "PANELS",
|
|
33
|
+
items: [
|
|
34
|
+
["CHAT", "Messages et interaction"],
|
|
35
|
+
["DAG", "Visualisation du workflow"],
|
|
36
|
+
["STATUS", "Agents et providers"],
|
|
37
|
+
],
|
|
38
|
+
},
|
|
39
|
+
];
|
|
40
|
+
return (_jsxs(Box, { flexDirection: "column", flexGrow: 1, borderStyle: "double", borderColor: "#f97316", paddingX: 2, children: [_jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { color: "#f97316", bold: true, children: "\u25A0 RAX-FLOW HELP" }), _jsx(Text, { color: "gray", children: " \u2014 [Esc] pour fermer" })] }), _jsx(Box, { flexDirection: "row", flexGrow: 1, children: sections.map((section) => (_jsxs(Box, { flexDirection: "column", width: 30, children: [_jsx(Text, { color: "gray", bold: true, underline: true, children: section.title }), _jsx(Box, { flexDirection: "column", marginTop: 1, children: section.items.map(([cmd, desc]) => (_jsxs(Box, { flexDirection: "row", marginBottom: 1, children: [_jsx(Text, { color: "cyan", children: cmd.padEnd(16) }), _jsx(Text, { color: "white", children: desc })] }, cmd))) })] }, section.title))) }), _jsx(Box, { borderStyle: "single", borderColor: "gray", marginTop: 1, children: _jsx(Text, { color: "gray", children: "Pour ex\u00E9cuter un workflow, tapez simplement votre prompt ou /run \"...\"" }) })] }));
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=HelpOverlay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HelpOverlay.js","sourceRoot":"","sources":["../../../src/tui/components/HelpOverlay.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAM1C,MAAM,UAAU,WAAW,CAAC,EAAE,SAAS,EAAoB;IACzD,QAAQ,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACtB,IAAI,GAAG,CAAC,MAAM,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YAChC,SAAS,EAAE,CAAC;QACd,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG;QACf;YACE,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE;gBACL,CAAC,eAAe,EAAE,sBAAsB,CAAC;gBACzC,CAAC,SAAS,EAAE,iBAAiB,CAAC;gBAC9B,CAAC,SAAS,EAAE,kBAAkB,CAAC;gBAC/B,CAAC,YAAY,EAAE,qBAAqB,CAAC;gBACrC,CAAC,YAAY,EAAE,wBAAwB,CAAC;gBACxC,CAAC,UAAU,EAAE,YAAY,CAAC;gBAC1B,CAAC,OAAO,EAAE,SAAS,CAAC;aACrB;SACF;QACD;YACE,KAAK,EAAE,YAAY;YACnB,KAAK,EAAE;gBACL,CAAC,KAAK,EAAE,wBAAwB,CAAC;gBACjC,CAAC,OAAO,EAAE,2BAA2B,CAAC;gBACtC,CAAC,QAAQ,EAAE,SAAS,CAAC;gBACrB,CAAC,KAAK,EAAE,eAAe,CAAC;aACzB;SACF;QACD;YACE,KAAK,EAAE,QAAQ;YACf,KAAK,EAAE;gBACL,CAAC,MAAM,EAAE,yBAAyB,CAAC;gBACnC,CAAC,KAAK,EAAE,2BAA2B,CAAC;gBACpC,CAAC,QAAQ,EAAE,qBAAqB,CAAC;aAClC;SACF;KACF,CAAC;IAEF,OAAO,CACL,MAAC,GAAG,IACF,aAAa,EAAC,QAAQ,EACtB,QAAQ,EAAE,CAAC,EACX,WAAW,EAAC,QAAQ,EACpB,WAAW,EAAC,SAAS,EACrB,QAAQ,EAAE,CAAC,aAEX,MAAC,GAAG,IAAC,YAAY,EAAE,CAAC,aAClB,KAAC,IAAI,IAAC,KAAK,EAAC,SAAS,EAAC,IAAI,2CAAuB,EACjD,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,0CAA4B,IAC1C,EAEN,KAAC,GAAG,IAAC,aAAa,EAAC,KAAK,EAAC,QAAQ,EAAE,CAAC,YACjC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CACzB,MAAC,GAAG,IAAqB,aAAa,EAAC,QAAQ,EAAC,KAAK,EAAE,EAAE,aACvD,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,EAAC,IAAI,QAAC,SAAS,kBAC9B,OAAO,CAAC,KAAK,GACT,EACP,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,SAAS,EAAE,CAAC,YACrC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAClC,MAAC,GAAG,IAAW,aAAa,EAAC,KAAK,EAAC,YAAY,EAAE,CAAC,aAChD,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,YAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAQ,EAC1C,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,YAAE,IAAI,GAAQ,KAFzB,GAAG,CAGP,CACP,CAAC,GACE,KAXE,OAAO,CAAC,KAAK,CAYjB,CACP,CAAC,GACE,EAEN,KAAC,GAAG,IAAC,WAAW,EAAC,QAAQ,EAAC,WAAW,EAAC,MAAM,EAAC,SAAS,EAAE,CAAC,YACvD,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,8FAA8E,GAC5F,IACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
interface InputBarProps {
|
|
2
|
+
onSubmit: (input: string) => void;
|
|
3
|
+
suggestions: string[];
|
|
4
|
+
isProcessing: boolean;
|
|
5
|
+
}
|
|
6
|
+
export declare function InputBar({ onSubmit, suggestions, isProcessing }: InputBarProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=InputBar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InputBar.d.ts","sourceRoot":"","sources":["../../../src/tui/components/InputBar.tsx"],"names":[],"mappings":"AAIA,UAAU,aAAa;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,wBAAgB,QAAQ,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,EAAE,aAAa,2CA4C9E"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from "react";
|
|
3
|
+
import { Box, Text } from "ink";
|
|
4
|
+
import TextInput from "ink-text-input";
|
|
5
|
+
export function InputBar({ onSubmit, suggestions, isProcessing }) {
|
|
6
|
+
const [input, setInput] = useState("");
|
|
7
|
+
const handleSubmit = (value) => {
|
|
8
|
+
if (value.trim()) {
|
|
9
|
+
onSubmit(value);
|
|
10
|
+
setInput("");
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
const filteredSuggestions = suggestions.filter((s) => s.toLowerCase().startsWith(input.toLowerCase())).slice(0, 5);
|
|
14
|
+
return (_jsxs(Box, { flexDirection: "column", borderStyle: "single", borderColor: "gray", paddingX: 1, children: [input.startsWith("/") && filteredSuggestions.length > 0 && (_jsx(Box, { flexDirection: "row", marginBottom: 1, children: filteredSuggestions.map((s) => (_jsx(Box, { marginRight: 2, children: _jsx(Text, { color: "cyan", children: s }) }, s))) })), _jsxs(Box, { flexDirection: "row", alignItems: "center", children: [_jsx(Text, { color: "#f97316", bold: true, children: "\u25B6" }), _jsx(Box, { marginLeft: 1, flexGrow: 1, children: _jsx(TextInput, { value: input, onChange: setInput, onSubmit: handleSubmit, placeholder: "Tapez /help ou votre prompt...", showCursor: true }) }), isProcessing && _jsx(Text, { color: "yellow", children: " \u25CF" })] }), _jsxs(Box, { flexDirection: "row", marginTop: 1, children: [_jsx(Text, { color: "gray", dimColor: true, children: "[Ctrl+C] Quitter" }), _jsx(Text, { color: "gray", dimColor: true, children: " \u2502 [/cmd] Commandes" })] })] }));
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=InputBar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InputBar.js","sourceRoot":"","sources":["../../../src/tui/components/InputBar.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAY,MAAM,KAAK,CAAC;AAC1C,OAAO,SAAS,MAAM,gBAAgB,CAAC;AAQvC,MAAM,UAAU,QAAQ,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAiB;IAC7E,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAEvC,MAAM,YAAY,GAAG,CAAC,KAAa,EAAE,EAAE;QACrC,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YACjB,QAAQ,CAAC,KAAK,CAAC,CAAC;YAChB,QAAQ,CAAC,EAAE,CAAC,CAAC;QACf,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,mBAAmB,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACnD,CAAC,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAChD,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEd,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,WAAW,EAAC,QAAQ,EAAC,WAAW,EAAC,MAAM,EAAC,QAAQ,EAAE,CAAC,aAC5E,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,IAAI,CAC1D,KAAC,GAAG,IAAC,aAAa,EAAC,KAAK,EAAC,YAAY,EAAE,CAAC,YACrC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAC9B,KAAC,GAAG,IAAS,WAAW,EAAE,CAAC,YACzB,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,YAAE,CAAC,GAAQ,IADrB,CAAC,CAEL,CACP,CAAC,GACE,CACP,EACD,MAAC,GAAG,IAAC,aAAa,EAAC,KAAK,EAAC,UAAU,EAAC,QAAQ,aAC1C,KAAC,IAAI,IAAC,KAAK,EAAC,SAAS,EAAC,IAAI,6BAAS,EACnC,KAAC,GAAG,IAAC,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,YAC7B,KAAC,SAAS,IACR,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,YAAY,EACtB,WAAW,EAAC,gCAAgC,EAC5C,UAAU,EAAE,IAAI,GAChB,GACE,EACL,YAAY,IAAI,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,wBAAU,IAC3C,EACN,MAAC,GAAG,IAAC,aAAa,EAAC,KAAK,EAAC,SAAS,EAAE,CAAC,aACnC,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,EAAC,QAAQ,uCAAwB,EACnD,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,EAAC,QAAQ,+CAA2B,IAClD,IACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
interface Agent {
|
|
2
|
+
name: string;
|
|
3
|
+
role: string;
|
|
4
|
+
status: "idle" | "running" | "queued" | "done";
|
|
5
|
+
provider: string;
|
|
6
|
+
}
|
|
7
|
+
interface Provider {
|
|
8
|
+
name: string;
|
|
9
|
+
status: "active" | "idle";
|
|
10
|
+
latency: number;
|
|
11
|
+
}
|
|
12
|
+
interface StatusPanelProps {
|
|
13
|
+
agents: Agent[];
|
|
14
|
+
providers: Provider[];
|
|
15
|
+
fitness: number;
|
|
16
|
+
currentWorkflow: string | null;
|
|
17
|
+
isActive: boolean;
|
|
18
|
+
}
|
|
19
|
+
export declare function StatusPanel({ agents, providers, fitness, currentWorkflow, isActive }: StatusPanelProps): import("react/jsx-runtime").JSX.Element;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=StatusPanel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatusPanel.d.ts","sourceRoot":"","sources":["../../../src/tui/components/StatusPanel.tsx"],"names":[],"mappings":"AAGA,UAAU,KAAK;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC/C,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,QAAQ;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,gBAAgB;IACxB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,EAAE,OAAO,CAAC;CACnB;AAgCD,wBAAgB,WAAW,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,EAAE,gBAAgB,2CAmCtG"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from "ink";
|
|
3
|
+
const statusIcons = {
|
|
4
|
+
idle: { icon: "○", color: "gray" },
|
|
5
|
+
running: { icon: "▶", color: "yellow" },
|
|
6
|
+
queued: { icon: "◐", color: "cyan" },
|
|
7
|
+
done: { icon: "●", color: "green" },
|
|
8
|
+
};
|
|
9
|
+
function AgentRow({ agent }) {
|
|
10
|
+
const { icon, color } = statusIcons[agent.status];
|
|
11
|
+
return (_jsxs(Box, { flexDirection: "row", justifyContent: "space-between", children: [_jsx(Text, { color: color, children: icon }), _jsx(Text, { color: "white", children: agent.name.slice(0, 12).padEnd(12) }), _jsxs(Text, { color: "gray", children: ["[", agent.provider, "]"] })] }));
|
|
12
|
+
}
|
|
13
|
+
function ProviderRow({ provider }) {
|
|
14
|
+
return (_jsxs(Box, { flexDirection: "row", justifyContent: "space-between", children: [_jsx(Text, { color: provider.status === "active" ? "green" : "gray", children: provider.status === "active" ? "●" : "○" }), _jsx(Text, { color: "white", children: provider.name }), _jsx(Text, { color: "gray", children: provider.latency > 0 ? `${provider.latency}ms` : "--" })] }));
|
|
15
|
+
}
|
|
16
|
+
export function StatusPanel({ agents, providers, fitness, currentWorkflow, isActive }) {
|
|
17
|
+
const fitnessColor = fitness >= 0.9 ? "green" : fitness >= 0.7 ? "yellow" : "red";
|
|
18
|
+
const borderColor = isActive ? "#f97316" : "gray";
|
|
19
|
+
return (_jsxs(Box, { flexDirection: "column", width: 30, borderStyle: "single", borderColor: borderColor, children: [_jsxs(Box, { borderStyle: "single", borderColor: "#f97316", marginBottom: 1, children: [_jsx(Text, { color: "#f97316", bold: true, children: "STATUS" }), isActive && _jsx(Text, { color: "yellow", children: " [ACTIF]" })] }), _jsxs(Box, { flexDirection: "column", paddingX: 1, children: [_jsx(Text, { color: "gray", bold: true, children: "WORKFLOW" }), _jsx(Text, { color: "white", children: currentWorkflow || "Aucun" }), _jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { color: "gray", children: "Fitness: " }), _jsx(Text, { color: fitnessColor, bold: true, children: fitness.toFixed(2) })] })] }), _jsxs(Box, { flexDirection: "column", paddingX: 1, marginTop: 1, children: [_jsx(Text, { color: "gray", bold: true, children: "AGENTS" }), agents.slice(0, 6).map((agent) => (_jsx(AgentRow, { agent: agent }, agent.name)))] }), _jsxs(Box, { flexDirection: "column", paddingX: 1, marginTop: 1, children: [_jsx(Text, { color: "gray", bold: true, children: "PROVIDERS" }), providers.map((provider) => (_jsx(ProviderRow, { provider: provider }, provider.name)))] })] }));
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=StatusPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatusPanel.js","sourceRoot":"","sources":["../../../src/tui/components/StatusPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
interface Message {
|
|
2
|
+
id: string;
|
|
3
|
+
type: "user" | "system" | "agent" | "error" | "success";
|
|
4
|
+
content: string;
|
|
5
|
+
timestamp: Date;
|
|
6
|
+
agent?: string;
|
|
7
|
+
}
|
|
8
|
+
interface Agent {
|
|
9
|
+
name: string;
|
|
10
|
+
role: string;
|
|
11
|
+
status: "idle" | "running" | "queued" | "done";
|
|
12
|
+
provider: string;
|
|
13
|
+
}
|
|
14
|
+
interface Provider {
|
|
15
|
+
name: string;
|
|
16
|
+
status: "active" | "idle";
|
|
17
|
+
latency: number;
|
|
18
|
+
}
|
|
19
|
+
interface DAGNode {
|
|
20
|
+
id: string;
|
|
21
|
+
name: string;
|
|
22
|
+
status: "pending" | "running" | "done" | "error";
|
|
23
|
+
agent?: string;
|
|
24
|
+
}
|
|
25
|
+
interface DAGLevel {
|
|
26
|
+
name: string;
|
|
27
|
+
progress: number;
|
|
28
|
+
nodes: DAGNode[];
|
|
29
|
+
}
|
|
30
|
+
interface WorkflowState {
|
|
31
|
+
levels: DAGLevel[];
|
|
32
|
+
currentLevel: number;
|
|
33
|
+
totalProgress: number;
|
|
34
|
+
}
|
|
35
|
+
interface AppState {
|
|
36
|
+
projectName: string;
|
|
37
|
+
agentCount: number;
|
|
38
|
+
provider: string;
|
|
39
|
+
status: "ready" | "running" | "error";
|
|
40
|
+
messages: Message[];
|
|
41
|
+
agents: Agent[];
|
|
42
|
+
providers: Provider[];
|
|
43
|
+
fitness: number;
|
|
44
|
+
currentWorkflow: string | null;
|
|
45
|
+
suggestions: string[];
|
|
46
|
+
isProcessing: boolean;
|
|
47
|
+
workflowState: WorkflowState;
|
|
48
|
+
}
|
|
49
|
+
export declare function useAppState(): {
|
|
50
|
+
state: AppState;
|
|
51
|
+
dispatch: import("react").Dispatch<import("react").SetStateAction<AppState>>;
|
|
52
|
+
processCommand: (input: string) => void;
|
|
53
|
+
};
|
|
54
|
+
export {};
|
|
55
|
+
//# sourceMappingURL=useAppState.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAppState.d.ts","sourceRoot":"","sources":["../../../src/tui/hooks/useAppState.ts"],"names":[],"mappings":"AAEA,UAAU,OAAO;IACf,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,CAAC;IACxD,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,KAAK;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC/C,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,QAAQ;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,OAAO;IACf,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,QAAQ;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,EAAE,CAAC;CAClB;AAED,UAAU,aAAa;IACrB,MAAM,EAAE,QAAQ,EAAE,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,UAAU,QAAQ;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;IACtC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,aAAa,CAAC;CAC9B;AA6DD,wBAAgB,WAAW;;;4BAgEkB,MAAM;EAmFlD"}
|