rax-flow 0.1.9 → 0.2.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 (223) hide show
  1. package/dist/bin.js +8 -6
  2. package/dist/bin.js.map +1 -1
  3. package/dist/hub/commands/index.d.ts.map +1 -1
  4. package/dist/hub/commands/index.js +7 -4
  5. package/dist/hub/commands/index.js.map +1 -1
  6. package/dist/hub/event-listener.d.ts +6 -0
  7. package/dist/hub/event-listener.d.ts.map +1 -1
  8. package/dist/hub/event-listener.js +10 -6
  9. package/dist/hub/event-listener.js.map +1 -1
  10. package/dist/hub/index.d.ts.map +1 -1
  11. package/dist/hub/index.js +12 -0
  12. package/dist/hub/index.js.map +1 -1
  13. package/dist/setup/components/ApiKeyInput.d.ts +25 -0
  14. package/dist/setup/components/ApiKeyInput.d.ts.map +1 -0
  15. package/dist/setup/components/ApiKeyInput.js +54 -0
  16. package/dist/setup/components/ApiKeyInput.js.map +1 -0
  17. package/dist/setup/components/AsciiBanner.d.ts +22 -0
  18. package/dist/setup/components/AsciiBanner.d.ts.map +1 -0
  19. package/dist/setup/components/AsciiBanner.js +55 -0
  20. package/dist/setup/components/AsciiBanner.js.map +1 -0
  21. package/dist/setup/components/CliDetector.d.ts +17 -0
  22. package/dist/setup/components/CliDetector.d.ts.map +1 -0
  23. package/dist/setup/components/CliDetector.js +79 -0
  24. package/dist/setup/components/CliDetector.js.map +1 -0
  25. package/dist/setup/components/ModeSelector.d.ts +8 -0
  26. package/dist/setup/components/ModeSelector.d.ts.map +1 -0
  27. package/dist/setup/components/ModeSelector.js +76 -0
  28. package/dist/setup/components/ModeSelector.js.map +1 -0
  29. package/dist/setup/components/ProviderSelector.d.ts +18 -0
  30. package/dist/setup/components/ProviderSelector.d.ts.map +1 -0
  31. package/dist/setup/components/ProviderSelector.js +97 -0
  32. package/dist/setup/components/ProviderSelector.js.map +1 -0
  33. package/dist/setup/components/SetupWizard.d.ts +2 -0
  34. package/dist/setup/components/SetupWizard.d.ts.map +1 -0
  35. package/dist/setup/components/SetupWizard.js +212 -0
  36. package/dist/setup/components/SetupWizard.js.map +1 -0
  37. package/dist/setup/components/StepIndicator.d.ts +13 -0
  38. package/dist/setup/components/StepIndicator.d.ts.map +1 -0
  39. package/dist/setup/components/StepIndicator.js +18 -0
  40. package/dist/setup/components/StepIndicator.js.map +1 -0
  41. package/dist/setup/components/SuccessScreen.d.ts +18 -0
  42. package/dist/setup/components/SuccessScreen.d.ts.map +1 -0
  43. package/dist/setup/components/SuccessScreen.js +38 -0
  44. package/dist/setup/components/SuccessScreen.js.map +1 -0
  45. package/dist/setup/index.d.ts +12 -0
  46. package/dist/setup/index.d.ts.map +1 -0
  47. package/dist/setup/index.js +29 -0
  48. package/dist/setup/index.js.map +1 -0
  49. package/dist/setup/utils/cli-detection.d.ts +12 -0
  50. package/dist/setup/utils/cli-detection.d.ts.map +1 -0
  51. package/dist/setup/utils/cli-detection.js +83 -0
  52. package/dist/setup/utils/cli-detection.js.map +1 -0
  53. package/dist/setup/utils/config-writer.d.ts +43 -0
  54. package/dist/setup/utils/config-writer.d.ts.map +1 -0
  55. package/dist/setup/utils/config-writer.js +180 -0
  56. package/dist/setup/utils/config-writer.js.map +1 -0
  57. package/dist/tui/App.d.ts +2 -1
  58. package/dist/tui/App.d.ts.map +1 -1
  59. package/dist/tui/App.js +78 -18
  60. package/dist/tui/App.js.map +1 -1
  61. package/dist/tui/components/AgentStateIcon.d.ts +18 -0
  62. package/dist/tui/components/AgentStateIcon.d.ts.map +1 -0
  63. package/dist/tui/components/AgentStateIcon.js +57 -0
  64. package/dist/tui/components/AgentStateIcon.js.map +1 -0
  65. package/dist/tui/components/AnimatedBranch.d.ts +39 -0
  66. package/dist/tui/components/AnimatedBranch.d.ts.map +1 -0
  67. package/dist/tui/components/AnimatedBranch.js +64 -0
  68. package/dist/tui/components/AnimatedBranch.js.map +1 -0
  69. package/dist/tui/components/ChatPanel.d.ts +2 -1
  70. package/dist/tui/components/ChatPanel.d.ts.map +1 -1
  71. package/dist/tui/components/ChatPanel.js +47 -28
  72. package/dist/tui/components/ChatPanel.js.map +1 -1
  73. package/dist/tui/components/DAGPanel.d.ts +14 -2
  74. package/dist/tui/components/DAGPanel.d.ts.map +1 -1
  75. package/dist/tui/components/DAGPanel.js +48 -27
  76. package/dist/tui/components/DAGPanel.js.map +1 -1
  77. package/dist/tui/components/ExecutionTimeline.d.ts +34 -0
  78. package/dist/tui/components/ExecutionTimeline.d.ts.map +1 -0
  79. package/dist/tui/components/ExecutionTimeline.js +67 -0
  80. package/dist/tui/components/ExecutionTimeline.js.map +1 -0
  81. package/dist/tui/components/Header.d.ts +2 -1
  82. package/dist/tui/components/Header.d.ts.map +1 -1
  83. package/dist/tui/components/Header.js +23 -20
  84. package/dist/tui/components/Header.js.map +1 -1
  85. package/dist/tui/components/HelpOverlay.d.ts +2 -1
  86. package/dist/tui/components/HelpOverlay.d.ts.map +1 -1
  87. package/dist/tui/components/HelpOverlay.js +59 -41
  88. package/dist/tui/components/HelpOverlay.js.map +1 -1
  89. package/dist/tui/components/InputBar.d.ts +3 -1
  90. package/dist/tui/components/InputBar.d.ts.map +1 -1
  91. package/dist/tui/components/InputBar.js +12 -7
  92. package/dist/tui/components/InputBar.js.map +1 -1
  93. package/dist/tui/components/LogsPanel.d.ts +3 -1
  94. package/dist/tui/components/LogsPanel.d.ts.map +1 -1
  95. package/dist/tui/components/LogsPanel.js +52 -3
  96. package/dist/tui/components/LogsPanel.js.map +1 -1
  97. package/dist/tui/components/MemoryPanel.d.ts +8 -6
  98. package/dist/tui/components/MemoryPanel.d.ts.map +1 -1
  99. package/dist/tui/components/MemoryPanel.js +37 -10
  100. package/dist/tui/components/MemoryPanel.js.map +1 -1
  101. package/dist/tui/components/MetricsPanel.d.ts +12 -7
  102. package/dist/tui/components/MetricsPanel.d.ts.map +1 -1
  103. package/dist/tui/components/MetricsPanel.js +24 -11
  104. package/dist/tui/components/MetricsPanel.js.map +1 -1
  105. package/dist/tui/components/StatusPanel.d.ts +3 -1
  106. package/dist/tui/components/StatusPanel.d.ts.map +1 -1
  107. package/dist/tui/components/StatusPanel.js +20 -18
  108. package/dist/tui/components/StatusPanel.js.map +1 -1
  109. package/dist/tui/components/TaskTree.d.ts +28 -0
  110. package/dist/tui/components/TaskTree.d.ts.map +1 -0
  111. package/dist/tui/components/TaskTree.js +29 -0
  112. package/dist/tui/components/TaskTree.js.map +1 -0
  113. package/dist/tui/components/animations/ProgressBar.d.ts +39 -0
  114. package/dist/tui/components/animations/ProgressBar.d.ts.map +1 -0
  115. package/dist/tui/components/animations/ProgressBar.js +39 -0
  116. package/dist/tui/components/animations/ProgressBar.js.map +1 -0
  117. package/dist/tui/components/animations/Pulse.d.ts +17 -0
  118. package/dist/tui/components/animations/Pulse.d.ts.map +1 -0
  119. package/dist/tui/components/animations/Pulse.js +47 -0
  120. package/dist/tui/components/animations/Pulse.js.map +1 -0
  121. package/dist/tui/components/animations/Spinner.d.ts +13 -0
  122. package/dist/tui/components/animations/Spinner.d.ts.map +1 -0
  123. package/dist/tui/components/animations/Spinner.js +36 -0
  124. package/dist/tui/components/animations/Spinner.js.map +1 -0
  125. package/dist/tui/components/animations/StatusAnimator.d.ts +27 -0
  126. package/dist/tui/components/animations/StatusAnimator.d.ts.map +1 -0
  127. package/dist/tui/components/animations/StatusAnimator.js +85 -0
  128. package/dist/tui/components/animations/StatusAnimator.js.map +1 -0
  129. package/dist/tui/components/animations/TypingEffect.d.ts +26 -0
  130. package/dist/tui/components/animations/TypingEffect.d.ts.map +1 -0
  131. package/dist/tui/components/animations/TypingEffect.js +59 -0
  132. package/dist/tui/components/animations/TypingEffect.js.map +1 -0
  133. package/dist/tui/components/animations/index.d.ts +8 -0
  134. package/dist/tui/components/animations/index.d.ts.map +1 -0
  135. package/dist/tui/components/animations/index.js +6 -0
  136. package/dist/tui/components/animations/index.js.map +1 -0
  137. package/dist/tui/hooks/useAnimation.d.ts +42 -0
  138. package/dist/tui/hooks/useAnimation.d.ts.map +1 -0
  139. package/dist/tui/hooks/useAnimation.js +212 -0
  140. package/dist/tui/hooks/useAnimation.js.map +1 -0
  141. package/dist/tui/hooks/useAppState.d.ts +9 -6
  142. package/dist/tui/hooks/useAppState.d.ts.map +1 -1
  143. package/dist/tui/hooks/useAppState.js +84 -69
  144. package/dist/tui/hooks/useAppState.js.map +1 -1
  145. package/dist/tui/services/orchestrator.d.ts.map +1 -1
  146. package/dist/tui/services/orchestrator.js +47 -3
  147. package/dist/tui/services/orchestrator.js.map +1 -1
  148. package/dist/tui/styles/borders.d.ts +31 -0
  149. package/dist/tui/styles/borders.d.ts.map +1 -0
  150. package/dist/tui/styles/borders.js +47 -0
  151. package/dist/tui/styles/borders.js.map +1 -0
  152. package/dist/tui/styles/colors.d.ts +18 -0
  153. package/dist/tui/styles/colors.d.ts.map +1 -0
  154. package/dist/tui/styles/colors.js +18 -0
  155. package/dist/tui/styles/colors.js.map +1 -0
  156. package/dist/tui/styles/index.d.ts +6 -0
  157. package/dist/tui/styles/index.d.ts.map +1 -0
  158. package/dist/tui/styles/index.js +6 -0
  159. package/dist/tui/styles/index.js.map +1 -0
  160. package/dist/tui/styles/indicators.d.ts +67 -0
  161. package/dist/tui/styles/indicators.d.ts.map +1 -0
  162. package/dist/tui/styles/indicators.js +42 -0
  163. package/dist/tui/styles/indicators.js.map +1 -0
  164. package/dist/tui/styles/layout.d.ts +21 -0
  165. package/dist/tui/styles/layout.d.ts.map +1 -0
  166. package/dist/tui/styles/layout.js +42 -0
  167. package/dist/tui/styles/layout.js.map +1 -0
  168. package/dist/tui/styles/providers.d.ts +77 -0
  169. package/dist/tui/styles/providers.d.ts.map +1 -0
  170. package/dist/tui/styles/providers.js +31 -0
  171. package/dist/tui/styles/providers.js.map +1 -0
  172. package/dist/tui/utils/animation.d.ts +44 -0
  173. package/dist/tui/utils/animation.d.ts.map +1 -0
  174. package/dist/tui/utils/animation.js +107 -0
  175. package/dist/tui/utils/animation.js.map +1 -0
  176. package/package.json +8 -8
  177. package/src/bin.ts +8 -5
  178. package/src/hub/commands/index.ts +7 -4
  179. package/src/hub/event-listener.ts +14 -10
  180. package/src/hub/index.ts +14 -2
  181. package/src/setup/components/ApiKeyInput.tsx +158 -0
  182. package/src/setup/components/AsciiBanner.tsx +125 -0
  183. package/src/setup/components/CliDetector.tsx +230 -0
  184. package/src/setup/components/ModeSelector.tsx +137 -0
  185. package/src/setup/components/ProviderSelector.tsx +174 -0
  186. package/src/setup/components/SetupWizard.tsx +368 -0
  187. package/src/setup/components/StepIndicator.tsx +74 -0
  188. package/src/setup/components/SuccessScreen.tsx +229 -0
  189. package/src/setup/index.ts +34 -0
  190. package/src/setup/utils/cli-detection.ts +99 -0
  191. package/src/setup/utils/config-writer.ts +249 -0
  192. package/src/tui/App.tsx +95 -64
  193. package/src/tui/components/AgentStateIcon.tsx +84 -0
  194. package/src/tui/components/AnimatedBranch.tsx +134 -0
  195. package/src/tui/components/ChatPanel.tsx +85 -43
  196. package/src/tui/components/DAGPanel.tsx +150 -58
  197. package/src/tui/components/ExecutionTimeline.tsx +225 -0
  198. package/src/tui/components/Header.tsx +67 -43
  199. package/src/tui/components/HelpOverlay.tsx +118 -61
  200. package/src/tui/components/InputBar.tsx +33 -19
  201. package/src/tui/components/LogsPanel.tsx +106 -14
  202. package/src/tui/components/MemoryPanel.tsx +106 -42
  203. package/src/tui/components/MetricsPanel.tsx +102 -61
  204. package/src/tui/components/StatusPanel.tsx +84 -37
  205. package/src/tui/components/TaskTree.tsx +159 -0
  206. package/src/tui/components/animations/ProgressBar.tsx +160 -0
  207. package/src/tui/components/animations/Pulse.tsx +73 -0
  208. package/src/tui/components/animations/Spinner.tsx +54 -0
  209. package/src/tui/components/animations/StatusAnimator.tsx +153 -0
  210. package/src/tui/components/animations/TypingEffect.tsx +119 -0
  211. package/src/tui/components/animations/index.ts +16 -0
  212. package/src/tui/hooks/useAnimation.ts +290 -0
  213. package/src/tui/hooks/useAppState.ts +52 -32
  214. package/src/tui/services/orchestrator.ts +57 -4
  215. package/src/tui/styles/borders.ts +51 -0
  216. package/src/tui/styles/colors.ts +19 -0
  217. package/src/tui/styles/index.ts +20 -0
  218. package/src/tui/styles/indicators.ts +54 -0
  219. package/src/tui/styles/layout.ts +44 -0
  220. package/src/tui/styles/providers.ts +32 -0
  221. package/src/tui/utils/animation.ts +124 -0
  222. package/LICENSE +0 -21
  223. package/tsconfig.tsbuildinfo +0 -1
@@ -1,13 +1,18 @@
1
+ import React from "react";
2
+ interface MetricsData {
3
+ sessions: number;
4
+ avgDuration: number;
5
+ successRate: number;
6
+ totalCost: number;
7
+ totalRetries?: number;
8
+ totalEscalations?: number;
9
+ }
1
10
  interface MetricsPanelProps {
2
- metrics: {
3
- sessions: number;
4
- avgDuration: number;
5
- successRate: number;
6
- totalCost: number;
7
- };
11
+ metrics: MetricsData;
8
12
  fitness: number;
9
13
  isActive: boolean;
14
+ tick?: number;
10
15
  }
11
- export declare function MetricsPanel({ metrics, fitness, isActive }: MetricsPanelProps): import("react/jsx-runtime").JSX.Element;
16
+ export declare const MetricsPanel: React.NamedExoticComponent<MetricsPanelProps>;
12
17
  export {};
13
18
  //# sourceMappingURL=MetricsPanel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MetricsPanel.d.ts","sourceRoot":"","sources":["../../../src/tui/components/MetricsPanel.tsx"],"names":[],"mappings":"AAGA,UAAU,iBAAiB;IACzB,OAAO,EAAE;QACP,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAcD,wBAAgB,YAAY,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,iBAAiB,2CAiF7E"}
1
+ {"version":3,"file":"MetricsPanel.d.ts","sourceRoot":"","sources":["../../../src/tui/components/MetricsPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAwB,MAAM,OAAO,CAAC;AAK7C,UAAU,WAAW;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,UAAU,iBAAiB;IACzB,OAAO,EAAE,WAAW,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAwCD,eAAO,MAAM,YAAY,+CAyFvB,CAAC"}
@@ -1,14 +1,27 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { memo, useMemo } from "react";
2
3
  import { Box, Text } from "ink";
3
- function ProgressBar({ value, max, width = 16 }) {
4
- const percent = Math.min((value / max) * 100, 100);
5
- const filled = Math.round((percent / 100) * width);
6
- const empty = width - filled;
7
- const bar = "".repeat(filled) + "░".repeat(empty);
8
- return (_jsx(Text, { color: percent >= 80 ? "green" : percent >= 50 ? "yellow" : "red", children: bar }));
9
- }
10
- export function MetricsPanel({ metrics, fitness, isActive }) {
11
- const borderColor = isActive ? "#f97316" : "gray";
12
- return (_jsxs(Box, { flexDirection: "column", width: 30, borderStyle: "single", borderColor: borderColor, paddingX: 1, children: [_jsxs(Box, { borderStyle: "single", borderColor: "#f97316", marginBottom: 1, children: [_jsx(Text, { color: "#f97316", bold: true, children: "METRICS" }), isActive && _jsx(Text, { color: "yellow", children: " [ACTIF]" })] }), _jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { color: "gray", bold: true, children: "PERFORMANCE" }), _jsxs(Box, { flexDirection: "row", marginTop: 1, children: [_jsx(Text, { color: "white", children: "Sessions: " }), _jsx(Text, { color: "cyan", bold: true, children: metrics.sessions })] }), _jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { color: "white", children: "Duration: " }), _jsxs(Text, { color: "cyan", children: [metrics.avgDuration, "ms"] })] }), _jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { color: "white", children: "Success: " }), _jsxs(Text, { color: "green", children: [metrics.successRate, "%"] }), _jsx(Text, { color: "gray", children: " " }), _jsx(ProgressBar, { value: metrics.successRate, max: 100, width: 8 })] }), _jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { color: "white", children: "Cost: " }), _jsxs(Text, { color: "yellow", children: ["$", metrics.totalCost.toFixed(4)] })] })] }), _jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { color: "gray", bold: true, children: "FITNESS" }), _jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { color: fitness >= 0.9 ? "green" : fitness >= 0.7 ? "yellow" : "red", bold: true, children: fitness.toFixed(2) }), _jsx(Text, { color: "gray", children: " " }), _jsx(ProgressBar, { value: fitness, max: 1, width: 12 })] }), _jsx(Text, { color: "gray", children: fitness >= 0.9 ? "[OPTIMAL]" : fitness >= 0.7 ? "[GOOD]" : "[IMPROVING]" })] }), _jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { color: "gray", bold: true, children: "TOP AGENTS" }), _jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { color: "white", children: "CodeGenerator" }), _jsx(Text, { color: "gray", children: " " }), _jsx(ProgressBar, { value: 45, max: 100, width: 8 }), _jsx(Text, { color: "gray", children: " 45%" })] }), _jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { color: "white", children: "TestAgent" }), _jsx(Text, { color: "gray", children: " " }), _jsx(ProgressBar, { value: 32, max: 100, width: 8 }), _jsx(Text, { color: "gray", children: " 32%" })] }), _jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { color: "white", children: "FixAgent" }), _jsx(Text, { color: "gray", children: " " }), _jsx(ProgressBar, { value: 18, max: 100, width: 8 }), _jsx(Text, { color: "gray", children: " 18%" })] })] })] })] }));
13
- }
4
+ import { tuiColors } from "../styles/index.js";
5
+ import { AnimatedProgressBar, FitnessAnimator, Pulse } from "./animations/index.js";
6
+ const TOP_AGENTS = [
7
+ { name: "CodeGenerator", percent: 45 },
8
+ { name: "TestAgent", percent: 32 },
9
+ { name: "FixAgent", percent: 18 },
10
+ ];
11
+ const AnimatedMetricBar = memo(function AnimatedMetricBar({ value, max, width = 16, tick, animated }) {
12
+ const percent = useMemo(() => Math.min((value / max) * 100, 100), [value, max]);
13
+ return (_jsx(AnimatedProgressBar, { progress: percent, width: width, tick: tick || 0, animated: animated, showPercentage: false }));
14
+ });
15
+ export const MetricsPanel = memo(function MetricsPanel({ metrics, fitness, isActive, tick = 0 }) {
16
+ const borderColor = isActive ? tuiColors.primary : tuiColors.border;
17
+ const fitnessColor = fitness >= 0.9
18
+ ? tuiColors.success
19
+ : fitness >= 0.7
20
+ ? tuiColors.warning
21
+ : tuiColors.error;
22
+ const showSuccessPulse = metrics.successRate >= 90;
23
+ const costStr = useMemo(() => metrics.totalCost.toFixed(4), [metrics.totalCost]);
24
+ const agentElements = useMemo(() => TOP_AGENTS.map((agent, idx) => (_jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { color: tuiColors.textPrimary, children: agent.name.padEnd(14) }), _jsx(AnimatedMetricBar, { value: agent.percent, max: 100, width: 8, tick: tick, animated: isActive && idx === 0 }), _jsxs(Text, { color: tuiColors.textTertiary, children: [" ", agent.percent, "%"] })] }, agent.name))), [tick, isActive]);
25
+ return (_jsxs(Box, { flexDirection: "column", width: 30, borderStyle: "single", borderColor: borderColor, paddingX: 1, children: [_jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { color: tuiColors.primary, bold: true, children: "\u250C\u2500" }), _jsx(Text, { color: tuiColors.primary, bold: true, children: " PERFORMANCE " }), _jsx(Text, { color: tuiColors.textTertiary, children: "\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500" })] }), _jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { color: tuiColors.textTertiary, bold: true, children: "METRICS" }), _jsxs(Box, { flexDirection: "row", marginTop: 1, children: [_jsx(Text, { color: tuiColors.textSecondary, children: "Sessions:" }), _jsxs(Text, { color: tuiColors.textPrimary, bold: true, children: [" ", metrics.sessions] })] }), _jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { color: tuiColors.textSecondary, children: "Avg Duration:" }), _jsxs(Text, { color: tuiColors.textPrimary, children: [" ", metrics.avgDuration, "ms"] })] }), _jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { color: tuiColors.textSecondary, children: "Success Rate:" }), _jsxs(Text, { color: tuiColors.success, children: [" ", metrics.successRate, "%"] }), showSuccessPulse && _jsx(Pulse, { interval: 1000, color: tuiColors.success, type: "breath" })] }), _jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { color: tuiColors.textSecondary, children: "Cost:" }), _jsxs(Text, { color: tuiColors.warning, children: [" $", costStr] })] })] }), _jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { color: tuiColors.textTertiary, bold: true, children: "FITNESS SCORE" }), _jsx(FitnessAnimator, { value: fitness }), _jsx(Box, { flexDirection: "row", children: _jsx(AnimatedMetricBar, { value: fitness, max: 1, width: 12, tick: tick, animated: isActive }) })] }), _jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { color: tuiColors.textTertiary, bold: true, children: "TOP AGENTS" }), _jsx(Box, { flexDirection: "column", marginTop: 1, children: agentElements })] })] }));
26
+ });
14
27
  //# sourceMappingURL=MetricsPanel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MetricsPanel.js","sourceRoot":"","sources":["../../../src/tui/components/MetricsPanel.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MetricsPanel.js","sourceRoot":"","sources":["../../../src/tui/components/MetricsPanel.tsx"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import React from "react";
1
2
  interface Agent {
2
3
  name: string;
3
4
  role: string;
@@ -15,7 +16,8 @@ interface StatusPanelProps {
15
16
  fitness: number;
16
17
  currentWorkflow: string | null;
17
18
  isActive: boolean;
19
+ tick?: number;
18
20
  }
19
- export declare function StatusPanel({ agents, providers, fitness, currentWorkflow, isActive }: StatusPanelProps): import("react/jsx-runtime").JSX.Element;
21
+ export declare const StatusPanel: React.NamedExoticComponent<StatusPanelProps>;
20
22
  export {};
21
23
  //# sourceMappingURL=StatusPanel.d.ts.map
@@ -1 +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"}
1
+ {"version":3,"file":"StatusPanel.d.ts","sourceRoot":"","sources":["../../../src/tui/components/StatusPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAwB,MAAM,OAAO,CAAC;AAK7C,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;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AA+CD,eAAO,MAAM,WAAW,8CAgEtB,CAAC"}
@@ -1,21 +1,23 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { memo, useMemo } from "react";
2
3
  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
- }
4
+ import { tuiColors, getStatusIndicator, getProviderTag } from "../styles/index.js";
5
+ import { Pulse, FitnessAnimator, StatusAnimator } from "./animations/index.js";
6
+ const AgentRow = memo(function AgentRow({ agent, tick }) {
7
+ const statusInfo = useMemo(() => getStatusIndicator(agent.status), [agent.status]);
8
+ const providerInfo = useMemo(() => getProviderTag(agent.provider), [agent.provider]);
9
+ return (_jsxs(Box, { flexDirection: "row", children: [agent.status === "running" ? (_jsx(StatusAnimator, { status: "running", showLabel: false })) : (_jsx(Text, { color: statusInfo.color, children: statusInfo.icon })), _jsxs(Text, { color: tuiColors.textPrimary, children: [" ", agent.name.slice(0, 14).padEnd(14)] }), _jsxs(Text, { color: tuiColors.textTertiary, children: [" ", providerInfo.code] }), _jsxs(Text, { color: tuiColors.textSecondary, children: [" ", agent.status.toUpperCase().padEnd(8)] })] }));
10
+ });
11
+ const ProviderRow = memo(function ProviderRow({ provider, tick }) {
12
+ const isActive = provider.status === "active";
13
+ const providerInfo = useMemo(() => getProviderTag(provider.name), [provider.name]);
14
+ return (_jsxs(Box, { flexDirection: "row", children: [isActive ? (_jsx(Pulse, { interval: 800, color: tuiColors.success, type: "breath" })) : (_jsx(Text, { color: tuiColors.textTertiary, children: "\u25CB" })), _jsxs(Text, { color: tuiColors.textPrimary, children: [" ", provider.name.padEnd(12)] }), _jsxs(Text, { color: tuiColors.textTertiary, children: [" ", provider.latency > 0 ? `${provider.latency}ms`.padStart(6) : "--".padStart(6)] })] }));
15
+ });
16
+ export const StatusPanel = memo(function StatusPanel({ agents, providers, fitness, currentWorkflow, isActive, tick = 0 }) {
17
+ const borderColor = isActive ? tuiColors.primary : tuiColors.border;
18
+ const activeAgents = useMemo(() => agents.filter(a => a.status === "running" || a.status === "queued").slice(0, 4), [agents]);
19
+ const hasNoActiveAgents = activeAgents.length === 0;
20
+ const workflowDisplay = useMemo(() => currentWorkflow ? `▶ ${currentWorkflow.slice(0, 20)}...` : "○ None", [currentWorkflow]);
21
+ return (_jsxs(Box, { flexDirection: "column", width: 30, borderStyle: "single", borderColor: borderColor, children: [_jsxs(Box, { paddingX: 1, children: [_jsx(Text, { color: tuiColors.primary, bold: true, children: "\u250C\u2500" }), _jsx(Text, { color: tuiColors.primary, bold: true, children: " SYSTEM_STATUS " }), _jsx(Text, { color: tuiColors.textTertiary, children: "\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500" })] }), _jsxs(Box, { flexDirection: "column", paddingX: 1, children: [_jsx(Text, { color: tuiColors.textTertiary, bold: true, children: "ORCHESTRATOR" }), _jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { color: tuiColors.textSecondary, children: "Status:" }), _jsx(Text, { color: tuiColors.success, children: " " }), _jsx(Pulse, { interval: 600, color: tuiColors.success, type: "breath" }), _jsx(Text, { color: tuiColors.success, children: " ACTIVE" })] })] }), _jsxs(Box, { flexDirection: "column", paddingX: 1, marginTop: 1, children: [_jsx(Text, { color: tuiColors.textTertiary, bold: true, children: "WORKFLOW" }), _jsx(Text, { color: tuiColors.textPrimary, children: workflowDisplay }), _jsx(FitnessAnimator, { value: fitness })] }), _jsxs(Box, { flexDirection: "column", paddingX: 1, marginTop: 1, children: [_jsx(Text, { color: tuiColors.textTertiary, bold: true, children: "ACTIVE AGENTS" }), activeAgents.map((agent) => (_jsx(AgentRow, { agent: agent, tick: tick }, agent.name))), hasNoActiveAgents && (_jsx(Text, { color: tuiColors.textQuaternary, children: " \u25CB All idle" }))] }), _jsxs(Box, { flexDirection: "column", paddingX: 1, marginTop: 1, children: [_jsx(Text, { color: tuiColors.textTertiary, bold: true, children: "PROVIDERS" }), providers.map((provider) => (_jsx(ProviderRow, { provider: provider, tick: tick }, provider.name)))] })] }));
22
+ });
21
23
  //# sourceMappingURL=StatusPanel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"StatusPanel.js","sourceRoot":"","sources":["../../../src/tui/components/StatusPanel.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"StatusPanel.js","sourceRoot":"","sources":["../../../src/tui/components/StatusPanel.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import React from "react";
2
+ import { AgentState } from "./AgentStateIcon.js";
3
+ export interface TaskNode {
4
+ id: string;
5
+ name: string;
6
+ state: AgentState;
7
+ level: number;
8
+ detail?: string;
9
+ children?: TaskNode[];
10
+ executionTime?: number;
11
+ subtasks?: string[];
12
+ }
13
+ export interface TaskTreeProps {
14
+ rootTask: string;
15
+ tasks: TaskNode[];
16
+ tick: number;
17
+ isActive?: boolean;
18
+ maxDisplay?: number;
19
+ }
20
+ export declare const TaskTree: React.NamedExoticComponent<TaskTreeProps>;
21
+ interface TaskHierarchyProps {
22
+ tasks: TaskNode[];
23
+ tick: number;
24
+ expandedIds?: Set<string>;
25
+ }
26
+ export declare const TaskHierarchy: React.NamedExoticComponent<TaskHierarchyProps>;
27
+ export {};
28
+ //# sourceMappingURL=TaskTree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskTree.d.ts","sourceRoot":"","sources":["../../../src/tui/components/TaskTree.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAwB,MAAM,OAAO,CAAC;AAG7C,OAAO,EAAkB,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGjE,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,UAAU,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAiDD,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,QAAQ,2CA4CnB,CAAC;AAEH,UAAU,kBAAkB;IAC1B,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC3B;AAED,eAAO,MAAM,aAAa,gDAkCxB,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ import { memo, useMemo } from "react";
3
+ import { Box, Text } from "ink";
4
+ import { tuiColors, treeChars } from "../styles/index.js";
5
+ import { AgentStateIcon } from "./AgentStateIcon.js";
6
+ import { AnimatedBranch } from "./AnimatedBranch.js";
7
+ const TaskNodeItem = memo(function TaskNodeItem({ node, tick, isLast, showDetail = true }) {
8
+ const indent = useMemo(() => " ".repeat(node.level), [node.level]);
9
+ const prefix = isLast ? treeChars.lastBranch : treeChars.branch;
10
+ const timeStr = node.executionTime ? `${node.executionTime.toFixed(1)}s` : "";
11
+ const paddedName = useMemo(() => node.name.padEnd(20), [node.name]);
12
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { color: tuiColors.textTertiary, children: [indent, prefix, " "] }), _jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { color: tuiColors.textSecondary, children: "[" }), _jsx(AgentStateIcon, { state: node.state, tick: tick }), _jsx(Text, { color: tuiColors.textSecondary, children: "]" })] }), _jsxs(Text, { color: tuiColors.textPrimary, children: [" ", paddedName] }), timeStr && (_jsxs(Text, { color: tuiColors.textTertiary, children: [" \u25CF ", timeStr] }))] }), showDetail && node.detail && (_jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { color: tuiColors.textTertiary, children: [indent, " \u2514\u2500\u2500 "] }), _jsx(Text, { color: tuiColors.textSecondary, children: node.detail })] })), showDetail && node.subtasks && node.subtasks.length > 0 && (_jsx(Box, { flexDirection: "column", children: node.subtasks.map((subtask, idx) => (_jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { color: tuiColors.textTertiary, children: [indent, " ", idx === node.subtasks.length - 1 ? '└──' : '├──', " "] }), _jsx(Text, { color: tuiColors.textTertiary, children: subtask })] }, idx))) }))] }));
13
+ });
14
+ export const TaskTree = memo(function TaskTree({ rootTask, tasks, tick, isActive = false, maxDisplay = 15 }) {
15
+ const borderColor = isActive ? tuiColors.primary : tuiColors.border;
16
+ const displayTasks = useMemo(() => tasks.slice(0, maxDisplay), [tasks, maxDisplay]);
17
+ const hiddenCount = tasks.length - maxDisplay;
18
+ const taskElements = useMemo(() => displayTasks.map((task, idx) => (_jsx(TaskNodeItem, { node: task, tick: tick, isLast: idx === displayTasks.length - 1 && hiddenCount === 0 }, task.id))), [displayTasks, tick, hiddenCount]);
19
+ return (_jsxs(Box, { flexDirection: "column", borderStyle: "single", borderColor: borderColor, paddingX: 1, children: [_jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { color: tuiColors.primary, bold: true, children: "\u250C\u2500" }), _jsx(Text, { color: tuiColors.primary, bold: true, children: " TASK_TREE " }), _jsx(Text, { color: tuiColors.textTertiary, children: "\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500" })] }), _jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { color: tuiColors.textPrimary, bold: true, children: "\u25A0 " }), _jsxs(Text, { color: tuiColors.textSecondary, children: ["root: ", rootTask] })] }), _jsx(Box, { flexDirection: "column", marginTop: 1, children: _jsx(AnimatedBranch, { type: "vertical", tick: tick, animated: isActive }) }), _jsxs(Box, { flexDirection: "column", children: [taskElements, hiddenCount > 0 && (_jsx(Box, { flexDirection: "row", children: _jsxs(Text, { color: tuiColors.textTertiary, children: [" \u2514\u2500\u2500 +", hiddenCount, " more tasks..."] }) }))] })] }));
20
+ });
21
+ export const TaskHierarchy = memo(function TaskHierarchy({ tasks, tick, expandedIds = new Set() }) {
22
+ const renderNode = (node, isLast) => {
23
+ const hasChildren = (node.children?.length ?? 0) > 0;
24
+ const isExpanded = expandedIds.has(node.id);
25
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(TaskNodeItem, { node: node, tick: tick, isLast: isLast, showDetail: isExpanded }), hasChildren && isExpanded && (_jsx(Box, { flexDirection: "column", marginLeft: 2, children: node.children.map((child, idx) => (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { flexDirection: "row", children: _jsx(AnimatedBranch, { type: "vertical", tick: tick }) }), renderNode(child, idx === node.children.length - 1)] }, child.id))) }))] }, node.id));
26
+ };
27
+ return (_jsx(Box, { flexDirection: "column", children: tasks.map((task, idx) => renderNode(task, idx === tasks.length - 1)) }));
28
+ });
29
+ //# sourceMappingURL=TaskTree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskTree.js","sourceRoot":"","sources":["../../../src/tui/components/TaskTree.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import React from "react";
2
+ interface ProgressBarProps {
3
+ progress: number;
4
+ width?: number;
5
+ showPercentage?: boolean;
6
+ animated?: boolean;
7
+ tick?: number;
8
+ showMarker?: boolean;
9
+ glowEffect?: boolean;
10
+ color?: string;
11
+ }
12
+ export declare const AnimatedProgressBar: React.NamedExoticComponent<ProgressBarProps>;
13
+ interface ProgressWithLabelProps {
14
+ label: string;
15
+ progress: number;
16
+ width?: number;
17
+ tick?: number;
18
+ animated?: boolean;
19
+ }
20
+ export declare const ProgressWithLabel: React.NamedExoticComponent<ProgressWithLabelProps>;
21
+ interface SegmentedProgressProps {
22
+ segments: {
23
+ progress: number;
24
+ color?: string;
25
+ label?: string;
26
+ }[];
27
+ width?: number;
28
+ tick?: number;
29
+ }
30
+ export declare const SegmentedProgress: React.NamedExoticComponent<SegmentedProgressProps>;
31
+ interface WorkflowProgressProps {
32
+ level: string;
33
+ progress: number;
34
+ isActive: boolean;
35
+ tick?: number;
36
+ }
37
+ export declare const WorkflowProgress: React.NamedExoticComponent<WorkflowProgressProps>;
38
+ export {};
39
+ //# sourceMappingURL=ProgressBar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProgressBar.d.ts","sourceRoot":"","sources":["../../../../src/tui/components/animations/ProgressBar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAwB,MAAM,OAAO,CAAC;AAI7C,UAAU,gBAAgB;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,mBAAmB,8CAoD9B,CAAC;AAEH,UAAU,sBAAsB;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,eAAO,MAAM,iBAAiB,oDAe5B,CAAC;AAEH,UAAU,sBAAsB;IAC9B,QAAQ,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,iBAAiB,oDA2B5B,CAAC;AAEH,UAAU,qBAAqB;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,gBAAgB,mDAuB3B,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { memo, useMemo } from "react";
3
+ import { Box, Text } from "ink";
4
+ import { tuiColors, getProgressMarker, getProgressGlow } from "../../styles/index.js";
5
+ export const AnimatedProgressBar = memo(function AnimatedProgressBar({ progress, width = 16, showPercentage = true, animated = true, tick = 0, showMarker = true, glowEffect = false, color, }) {
6
+ const filled = Math.round((progress / 100) * width);
7
+ const empty = width - filled;
8
+ const markerPos = Math.min(filled, width - 1);
9
+ const barColor = color || (progress >= 100
10
+ ? tuiColors.success
11
+ : progress > 0
12
+ ? tuiColors.warning
13
+ : tuiColors.textTertiary);
14
+ const filledChar = glowEffect && animated ? getProgressGlow(tick) : "█";
15
+ const emptyChar = "░";
16
+ const markerChar = showMarker && animated && progress > 0 && progress < 100 ? getProgressMarker(tick) : "";
17
+ const beforeMarker = filled > 0 ? filledChar.repeat(Math.max(0, filled - 1)) : "";
18
+ const afterMarker = emptyChar.repeat(empty);
19
+ const progressStr = useMemo(() => progress.toString().padStart(3), [progress]);
20
+ if (showMarker && animated && progress > 0 && progress < 100) {
21
+ return (_jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { color: barColor, children: beforeMarker }), _jsx(Text, { color: tuiColors.primary, bold: true, children: markerChar }), _jsx(Text, { color: tuiColors.textTertiary, children: afterMarker.slice(1) }), showPercentage && (_jsxs(Text, { color: barColor, children: [" ", progressStr, "%"] }))] }));
22
+ }
23
+ const bar = filledChar.repeat(filled) + emptyChar.repeat(empty);
24
+ return (_jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { color: barColor, children: bar }), showPercentage && (_jsxs(Text, { color: barColor, children: [" ", progressStr, "%"] }))] }));
25
+ });
26
+ export const ProgressWithLabel = memo(function ProgressWithLabel({ label, progress, width = 12, tick = 0, animated = true }) {
27
+ const paddedLabel = useMemo(() => label.padEnd(10), [label]);
28
+ return (_jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { color: tuiColors.textSecondary, children: paddedLabel }), _jsx(AnimatedProgressBar, { progress: progress, width: width, tick: tick, animated: animated, showMarker: true })] }));
29
+ });
30
+ export const SegmentedProgress = memo(function SegmentedProgress({ segments, width = 20, tick = 0 }) {
31
+ const totalProgress = useMemo(() => segments.reduce((sum, s) => sum + s.progress, 0) / segments.length, [segments]);
32
+ return (_jsx(Box, { flexDirection: "column", children: segments.map((segment, idx) => (_jsxs(Box, { flexDirection: "row", children: [segment.label && _jsx(Text, { color: tuiColors.textTertiary, children: segment.label.padEnd(8) }), _jsx(AnimatedProgressBar, { progress: segment.progress, width: width, tick: tick, color: segment.color, showPercentage: false }), _jsxs(Text, { color: segment.color || tuiColors.textPrimary, children: [" ", segment.progress, "%"] })] }, idx))) }));
33
+ });
34
+ export const WorkflowProgress = memo(function WorkflowProgress({ level, progress, isActive, tick = 0 }) {
35
+ const levelColor = isActive ? tuiColors.primary : tuiColors.textSecondary;
36
+ const paddedLevel = useMemo(() => level.padEnd(12), [level]);
37
+ return (_jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { color: levelColor, bold: true, children: paddedLevel }), _jsx(AnimatedProgressBar, { progress: progress, width: 12, tick: tick, animated: isActive, showMarker: isActive, glowEffect: isActive, color: isActive ? tuiColors.warning : undefined })] }));
38
+ });
39
+ //# sourceMappingURL=ProgressBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProgressBar.js","sourceRoot":"","sources":["../../../../src/tui/components/animations/ProgressBar.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import React from "react";
2
+ interface PulseProps {
3
+ interval?: number;
4
+ color?: string;
5
+ isAnimating?: boolean;
6
+ type?: "pulse" | "breath" | "ping";
7
+ }
8
+ export declare const Pulse: React.NamedExoticComponent<PulseProps>;
9
+ export declare function usePulseFrame(tick: number, type?: "pulse" | "breath" | "ping"): string;
10
+ export declare function usePulseIntensity(tick: number, interval?: number): number;
11
+ interface StatusPulseProps {
12
+ status: "online" | "offline" | "running" | "error";
13
+ tick?: number;
14
+ }
15
+ export declare const StatusPulse: React.NamedExoticComponent<StatusPulseProps>;
16
+ export {};
17
+ //# sourceMappingURL=Pulse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Pulse.d.ts","sourceRoot":"","sources":["../../../../src/tui/components/animations/Pulse.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAe,MAAM,OAAO,CAAC;AAqBpC,UAAU,UAAU;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;CACpC;AAED,eAAO,MAAM,KAAK,wCAYhB,CAAC;AAEH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,OAAO,GAAG,QAAQ,GAAG,MAAgB,GAAG,MAAM,CAG/F;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAY,GAAG,MAAM,CAI9E;AAED,UAAU,gBAAgB;IACxB,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;IACnD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,WAAW,8CActB,CAAC"}
@@ -0,0 +1,47 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { memo } from "react";
3
+ import { Text } from "ink";
4
+ import { useAnimation } from "../../hooks/useAnimation.js";
5
+ import { tuiColors } from "../../styles/index.js";
6
+ const PULSE_FRAMES = ["●", "◐", "○", "◐"];
7
+ const BREATH_FRAMES = ["●", "●", "◐", "◐", "○", "○", "◐", "◐"];
8
+ const PING_FRAMES = ["●", "●", "●", "○", "○", "○", "○", "○", "○", "○"];
9
+ const FRAME_MAP = {
10
+ pulse: PULSE_FRAMES,
11
+ breath: BREATH_FRAMES,
12
+ ping: PING_FRAMES,
13
+ };
14
+ const DEFAULT_INTERVALS = {
15
+ pulse: 300,
16
+ breath: 600,
17
+ ping: 400,
18
+ };
19
+ export const Pulse = memo(function Pulse({ interval, color = tuiColors.success, isAnimating = true, type = "pulse" }) {
20
+ const frames = FRAME_MAP[type];
21
+ const actualInterval = interval ?? DEFAULT_INTERVALS[type];
22
+ const { frame } = useAnimation({ interval: actualInterval, loop: true, autoStart: isAnimating, maxFps: 15 });
23
+ const currentFrame = frames[frame % frames.length];
24
+ return _jsx(Text, { color: color, children: currentFrame });
25
+ });
26
+ export function usePulseFrame(tick, type = "pulse") {
27
+ const frames = FRAME_MAP[type];
28
+ return frames[tick % frames.length];
29
+ }
30
+ export function usePulseIntensity(tick, interval = 100) {
31
+ const cycleLength = 20;
32
+ const phase = (tick % cycleLength) / cycleLength;
33
+ return 0.5 + Math.sin(phase * Math.PI * 2) * 0.5;
34
+ }
35
+ export const StatusPulse = memo(function StatusPulse({ status, tick }) {
36
+ if (status === "running") {
37
+ return _jsx(Pulse, { interval: 200, color: tuiColors.warning, type: "pulse" });
38
+ }
39
+ if (status === "online") {
40
+ return _jsx(Pulse, { interval: 600, color: tuiColors.success, type: "breath" });
41
+ }
42
+ if (status === "error") {
43
+ return _jsx(Pulse, { interval: 400, color: tuiColors.error, type: "ping" });
44
+ }
45
+ return _jsx(Text, { color: tuiColors.textTertiary, children: "\u25CB" });
46
+ });
47
+ //# sourceMappingURL=Pulse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Pulse.js","sourceRoot":"","sources":["../../../../src/tui/components/animations/Pulse.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import React from "react";
2
+ export type SpinnerType = "dots" | "circle" | "pulse" | "brackets" | "arrows" | "hamburger" | "grow";
3
+ interface SpinnerProps {
4
+ type?: SpinnerType;
5
+ interval?: number;
6
+ color?: string;
7
+ isAnimating?: boolean;
8
+ }
9
+ export declare const Spinner: React.NamedExoticComponent<SpinnerProps>;
10
+ export declare function useSpinnerFrame(type: SpinnerType | undefined, tick: number): string;
11
+ export declare const spinnerTypes: SpinnerType[];
12
+ export {};
13
+ //# sourceMappingURL=Spinner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Spinner.d.ts","sourceRoot":"","sources":["../../../../src/tui/components/animations/Spinner.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAwB,MAAM,OAAO,CAAC;AAK7C,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,GAAG,WAAW,GAAG,MAAM,CAAC;AAsBrG,UAAU,YAAY;IACpB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,eAAO,MAAM,OAAO,0CAYlB,CAAC;AAEH,wBAAgB,eAAe,CAAC,IAAI,EAAE,WAAW,YAAS,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAGhF;AAED,eAAO,MAAM,YAAY,EAAkC,WAAW,EAAE,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { memo } from "react";
3
+ import { Text } from "ink";
4
+ import { useAnimation } from "../../hooks/useAnimation.js";
5
+ import { tuiColors } from "../../styles/index.js";
6
+ const SPINNER_FRAMES = {
7
+ dots: ["⠋", "⠙", "⠹", "⠸", "⼸", "⠴", "⠦", "⠧", "⠇", "⠏"],
8
+ circle: ["◐", "◓", "◑", "◒"],
9
+ pulse: ["●", "◐", "○", "◐"],
10
+ brackets: ["[ ]", "[= ]", "[== ]", "[=== ]", "[==== ]", "[===== ]", "[====== ]", "[======= ]", "[======== ]", "[========= ]", "[==========]", "[ =========]", "[ ========]", "[ =======]", "[ ======]", "[ =====]", "[ ====]", "[ ===]", "[ ==]", "[ =]"],
11
+ arrows: ["←", "↖", "↑", "↗", "→", "↘", "↓", "↙"],
12
+ hamburger: ["☰", "☱", "ěr", "☳", "☴", "pě", "☲", "☶"],
13
+ grow: ["▁", "▂", "▃", "▄", "▅", "▆", "▇", "█", "▇", "▆", "▅", "▄", "▃", "▂"],
14
+ };
15
+ const DEFAULT_INTERVALS = {
16
+ dots: 100,
17
+ circle: 120,
18
+ pulse: 200,
19
+ brackets: 80,
20
+ arrows: 100,
21
+ hamburger: 150,
22
+ grow: 100,
23
+ };
24
+ export const Spinner = memo(function Spinner({ type = "dots", interval, color = tuiColors.primary, isAnimating = true }) {
25
+ const frames = SPINNER_FRAMES[type];
26
+ const actualInterval = interval ?? DEFAULT_INTERVALS[type];
27
+ const { frame } = useAnimation({ interval: actualInterval, loop: true, autoStart: isAnimating, maxFps: 20 });
28
+ const currentFrame = frames[frame % frames.length];
29
+ return _jsx(Text, { color: color, children: currentFrame });
30
+ });
31
+ export function useSpinnerFrame(type = "dots", tick) {
32
+ const frames = SPINNER_FRAMES[type];
33
+ return frames[tick % frames.length];
34
+ }
35
+ export const spinnerTypes = Object.keys(SPINNER_FRAMES);
36
+ //# sourceMappingURL=Spinner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Spinner.js","sourceRoot":"","sources":["../../../../src/tui/components/animations/Spinner.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,IAAI,EAAW,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAIlD,MAAM,cAAc,GAAkC;IACpD,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACxD,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAC5B,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAC3B,QAAQ,EAAE,CAAC,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,CAAC;IAC1U,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAChD,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC;IACrD,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;CAC7E,CAAC;AAEF,MAAM,iBAAiB,GAAgC;IACrD,IAAI,EAAE,GAAG;IACT,MAAM,EAAE,GAAG;IACX,KAAK,EAAE,GAAG;IACV,QAAQ,EAAE,EAAE;IACZ,MAAM,EAAE,GAAG;IACX,SAAS,EAAE,GAAG;IACd,IAAI,EAAE,GAAG;CACV,CAAC;AASF,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,OAAO,CAAC,EAC3C,IAAI,GAAG,MAAM,EACb,QAAQ,EACR,KAAK,GAAG,SAAS,CAAC,OAAO,EACzB,WAAW,GAAG,IAAI,EACL;IACb,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,cAAc,GAAG,QAAQ,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC3D,MAAM,EAAE,KAAK,EAAE,GAAG,YAAY,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7G,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAEnD,OAAO,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,YAAG,YAAY,GAAQ,CAAC;AACnD,CAAC,CAAC,CAAC;AAEH,MAAM,UAAU,eAAe,CAAC,OAAoB,MAAM,EAAE,IAAY;IACtE,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACpC,OAAO,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAkB,CAAC"}
@@ -0,0 +1,27 @@
1
+ import React from "react";
2
+ export type TransitionStatus = "entering" | "active" | "exiting" | "hidden";
3
+ interface StatusAnimatorProps {
4
+ status: "pending" | "running" | "done" | "error" | "idle" | "queued";
5
+ label?: string;
6
+ showLabel?: boolean;
7
+ transitionDuration?: number;
8
+ }
9
+ export declare const StatusAnimator: React.NamedExoticComponent<StatusAnimatorProps>;
10
+ interface MetricPulseProps {
11
+ value: number | string;
12
+ label: string;
13
+ unit?: string;
14
+ threshold?: {
15
+ warning: number;
16
+ critical: number;
17
+ };
18
+ isHighlighted?: boolean;
19
+ }
20
+ export declare const MetricPulse: React.NamedExoticComponent<MetricPulseProps>;
21
+ interface FitnessAnimatorProps {
22
+ value: number;
23
+ previousValue?: number;
24
+ }
25
+ export declare const FitnessAnimator: React.NamedExoticComponent<FitnessAnimatorProps>;
26
+ export {};
27
+ //# sourceMappingURL=StatusAnimator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatusAnimator.d.ts","sourceRoot":"","sources":["../../../../src/tui/components/animations/StatusAnimator.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4C,MAAM,OAAO,CAAC;AAKjE,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE5E,UAAU,mBAAmB;IAC3B,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAqBD,eAAO,MAAM,cAAc,iDAuDzB,CAAC;AAEH,UAAU,gBAAgB;IACxB,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAClD,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,eAAO,MAAM,WAAW,8CAsBtB,CAAC;AAEH,UAAU,oBAAoB;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,eAAe,kDAyB1B,CAAC"}