@ranker/raxflow 0.2.1 → 0.2.3

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 (214) hide show
  1. package/dist/benchmark.d.ts +10 -0
  2. package/dist/bin.d.ts +3 -0
  3. package/dist/bootstrap.d.ts +8 -0
  4. package/dist/bridge-adapter-templates.d.ts +4 -0
  5. package/dist/bridge-test.d.ts +7 -0
  6. package/dist/dashboard.d.ts +4 -0
  7. package/dist/doctor.d.ts +6 -0
  8. package/dist/evolve.d.ts +7 -0
  9. package/dist/host-init-templates.d.ts +16 -0
  10. package/dist/hub/__tests__/commands.test.d.ts +2 -0
  11. package/dist/hub/__tests__/history.test.d.ts +2 -0
  12. package/dist/hub/__tests__/parser.test.d.ts +2 -0
  13. package/dist/hub/commands/agents.d.ts +3 -0
  14. package/dist/hub/commands/index.d.ts +4 -0
  15. package/dist/hub/commands/logs.d.ts +3 -0
  16. package/dist/hub/commands/memory.d.ts +3 -0
  17. package/dist/hub/commands/metrics.d.ts +3 -0
  18. package/dist/hub/commands/providers.d.ts +3 -0
  19. package/dist/hub/commands/run.d.ts +3 -0
  20. package/dist/hub/commands/status.d.ts +3 -0
  21. package/dist/hub/commands/workflows.d.ts +3 -0
  22. package/dist/hub/config-loader.d.ts +4 -0
  23. package/dist/hub/history.d.ts +13 -0
  24. package/dist/hub/index.d.ts +4 -0
  25. package/dist/hub/parser.d.ts +4 -0
  26. package/dist/hub/styles/borders.d.ts +23 -0
  27. package/dist/hub/styles/colors.d.ts +63 -0
  28. package/dist/hub/styles/typography.d.ts +34 -0
  29. package/dist/hub/types.d.ts +27 -0
  30. package/{src/index.ts → dist/index.d.ts} +1 -0
  31. package/dist/init-host.d.ts +10 -0
  32. package/dist/install.d.ts +8 -0
  33. package/dist/run.d.ts +16 -0
  34. package/dist/setup/components/ProviderSelector.d.ts.map +1 -1
  35. package/dist/setup/components/ProviderSelector.js +8 -7
  36. package/dist/setup/components/ProviderSelector.js.map +1 -1
  37. package/dist/styles.d.ts +12 -0
  38. package/dist/tui/App.d.ts.map +1 -1
  39. package/dist/tui/App.js +7 -2
  40. package/dist/tui/App.js.map +1 -1
  41. package/dist/tui/components/ChatPanel.d.ts +1 -0
  42. package/dist/tui/components/ChatPanel.d.ts.map +1 -1
  43. package/dist/tui/components/ChatPanel.js +4 -3
  44. package/dist/tui/components/ChatPanel.js.map +1 -1
  45. package/dist/tui/components/DAGPanel.d.ts +1 -0
  46. package/dist/tui/components/DAGPanel.d.ts.map +1 -1
  47. package/dist/tui/components/DAGPanel.js +4 -3
  48. package/dist/tui/components/DAGPanel.js.map +1 -1
  49. package/dist/tui/components/Header.d.ts.map +1 -1
  50. package/dist/tui/components/Header.js +1 -1
  51. package/dist/tui/components/Header.js.map +1 -1
  52. package/dist/tui/components/InputBar.d.ts.map +1 -1
  53. package/dist/tui/components/InputBar.js +1 -1
  54. package/dist/tui/components/InputBar.js.map +1 -1
  55. package/dist/tui/components/LogsPanel.d.ts +1 -0
  56. package/dist/tui/components/LogsPanel.d.ts.map +1 -1
  57. package/dist/tui/components/LogsPanel.js +4 -3
  58. package/dist/tui/components/LogsPanel.js.map +1 -1
  59. package/dist/tui/components/MemoryPanel.d.ts +1 -0
  60. package/dist/tui/components/MemoryPanel.d.ts.map +1 -1
  61. package/dist/tui/components/MemoryPanel.js +2 -2
  62. package/dist/tui/components/MemoryPanel.js.map +1 -1
  63. package/dist/tui/components/MetricsPanel.d.ts +1 -0
  64. package/dist/tui/components/MetricsPanel.d.ts.map +1 -1
  65. package/dist/tui/components/MetricsPanel.js +2 -2
  66. package/dist/tui/components/MetricsPanel.js.map +1 -1
  67. package/dist/tui/components/StatusPanel.d.ts +1 -0
  68. package/dist/tui/components/StatusPanel.d.ts.map +1 -1
  69. package/dist/tui/components/StatusPanel.js +4 -3
  70. package/dist/tui/components/StatusPanel.js.map +1 -1
  71. package/dist/vendor-manifests.d.ts +22 -0
  72. package/package.json +5 -1
  73. package/dashboard/index.html +0 -420
  74. package/dist/hub/chat/ChatApp.d.ts +0 -2
  75. package/dist/hub/chat/ChatApp.d.ts.map +0 -1
  76. package/dist/hub/chat/ChatApp.js +0 -146
  77. package/dist/hub/chat/ChatApp.js.map +0 -1
  78. package/dist/hub/chat/components/ChatInput.d.ts +0 -9
  79. package/dist/hub/chat/components/ChatInput.d.ts.map +0 -1
  80. package/dist/hub/chat/components/ChatInput.js +0 -19
  81. package/dist/hub/chat/components/ChatInput.js.map +0 -1
  82. package/dist/hub/chat/components/MessageList.d.ts +0 -7
  83. package/dist/hub/chat/components/MessageList.d.ts.map +0 -1
  84. package/dist/hub/chat/components/MessageList.js +0 -6
  85. package/dist/hub/chat/components/MessageList.js.map +0 -1
  86. package/dist/hub/chat/context.d.ts.map +0 -1
  87. package/dist/hub/chat/context.js +0 -42
  88. package/dist/hub/chat/context.js.map +0 -1
  89. package/dist/hub/chat/hooks/useChatHistory.d.ts +0 -7
  90. package/dist/hub/chat/hooks/useChatHistory.d.ts.map +0 -1
  91. package/dist/hub/chat/hooks/useChatHistory.js +0 -31
  92. package/dist/hub/chat/hooks/useChatHistory.js.map +0 -1
  93. package/dist/hub/chat/index.d.ts.map +0 -1
  94. package/dist/hub/chat/index.js +0 -7
  95. package/dist/hub/chat/index.js.map +0 -1
  96. package/dist/hub/chat/intent-parser.d.ts.map +0 -1
  97. package/dist/hub/chat/intent-parser.js +0 -48
  98. package/dist/hub/chat/intent-parser.js.map +0 -1
  99. package/dist/hub/chat/types.d.ts.map +0 -1
  100. package/dist/hub/chat/types.js +0 -2
  101. package/dist/hub/chat/types.js.map +0 -1
  102. package/dist/hub/tui/App.d.ts +0 -2
  103. package/dist/hub/tui/App.d.ts.map +0 -1
  104. package/dist/hub/tui/App.js +0 -53
  105. package/dist/hub/tui/App.js.map +0 -1
  106. package/dist/hub/tui/components/AgentQueue.d.ts +0 -6
  107. package/dist/hub/tui/components/AgentQueue.d.ts.map +0 -1
  108. package/dist/hub/tui/components/AgentQueue.js +0 -20
  109. package/dist/hub/tui/components/AgentQueue.js.map +0 -1
  110. package/dist/hub/tui/components/DAGPanel.d.ts +0 -16
  111. package/dist/hub/tui/components/DAGPanel.d.ts.map +0 -1
  112. package/dist/hub/tui/components/DAGPanel.js +0 -51
  113. package/dist/hub/tui/components/DAGPanel.js.map +0 -1
  114. package/dist/hub/tui/components/Header.d.ts +0 -7
  115. package/dist/hub/tui/components/Header.d.ts.map +0 -1
  116. package/dist/hub/tui/components/Header.js +0 -17
  117. package/dist/hub/tui/components/Header.js.map +0 -1
  118. package/dist/hub/tui/components/LogsPanel.d.ts +0 -6
  119. package/dist/hub/tui/components/LogsPanel.d.ts.map +0 -1
  120. package/dist/hub/tui/components/LogsPanel.js +0 -26
  121. package/dist/hub/tui/components/LogsPanel.js.map +0 -1
  122. package/dist/hub/tui/components/StatusBar.d.ts +0 -8
  123. package/dist/hub/tui/components/StatusBar.d.ts.map +0 -1
  124. package/dist/hub/tui/components/StatusBar.js +0 -7
  125. package/dist/hub/tui/components/StatusBar.js.map +0 -1
  126. package/dist/hub/tui/hooks/useEvents.d.ts +0 -2
  127. package/dist/hub/tui/hooks/useEvents.d.ts.map +0 -1
  128. package/dist/hub/tui/hooks/useEvents.js +0 -13
  129. package/dist/hub/tui/hooks/useEvents.js.map +0 -1
  130. package/dist/hub/tui/index.d.ts.map +0 -1
  131. package/dist/hub/tui/index.js +0 -7
  132. package/dist/hub/tui/index.js.map +0 -1
  133. package/dist/hub/tui/types.d.ts.map +0 -1
  134. package/dist/hub/tui/types.js +0 -2
  135. package/dist/hub/tui/types.js.map +0 -1
  136. package/src/benchmark.ts +0 -156
  137. package/src/bin.ts +0 -156
  138. package/src/bootstrap.ts +0 -36
  139. package/src/bridge-adapter-templates.ts +0 -181
  140. package/src/bridge-test.ts +0 -107
  141. package/src/dashboard.ts +0 -51
  142. package/src/doctor.ts +0 -92
  143. package/src/evolve.ts +0 -74
  144. package/src/host-init-templates.ts +0 -134
  145. package/src/hub/__tests__/commands.test.ts +0 -84
  146. package/src/hub/__tests__/history.test.ts +0 -137
  147. package/src/hub/__tests__/parser.test.ts +0 -105
  148. package/src/hub/commands/agents.ts +0 -53
  149. package/src/hub/commands/index.ts +0 -140
  150. package/src/hub/commands/logs.ts +0 -70
  151. package/src/hub/commands/memory.ts +0 -47
  152. package/src/hub/commands/metrics.ts +0 -49
  153. package/src/hub/commands/providers.ts +0 -39
  154. package/src/hub/commands/run.ts +0 -37
  155. package/src/hub/commands/status.ts +0 -69
  156. package/src/hub/commands/workflows.ts +0 -64
  157. package/src/hub/config-loader.ts +0 -37
  158. package/src/hub/event-listener.ts +0 -17
  159. package/src/hub/history.ts +0 -66
  160. package/src/hub/index.ts +0 -132
  161. package/src/hub/parser.ts +0 -107
  162. package/src/hub/styles/borders.ts +0 -74
  163. package/src/hub/styles/colors.ts +0 -129
  164. package/src/hub/styles/typography.ts +0 -68
  165. package/src/hub/types.ts +0 -31
  166. package/src/init-host.ts +0 -285
  167. package/src/install.ts +0 -118
  168. package/src/run.ts +0 -317
  169. package/src/setup/components/ApiKeyInput.tsx +0 -158
  170. package/src/setup/components/AsciiBanner.tsx +0 -125
  171. package/src/setup/components/CliDetector.tsx +0 -230
  172. package/src/setup/components/ModeSelector.tsx +0 -137
  173. package/src/setup/components/ProviderSelector.tsx +0 -174
  174. package/src/setup/components/SetupWizard.tsx +0 -368
  175. package/src/setup/components/StepIndicator.tsx +0 -74
  176. package/src/setup/components/SuccessScreen.tsx +0 -229
  177. package/src/setup/index.ts +0 -34
  178. package/src/setup/utils/cli-detection.ts +0 -99
  179. package/src/setup/utils/config-writer.ts +0 -249
  180. package/src/styles.ts +0 -12
  181. package/src/tui/App.tsx +0 -177
  182. package/src/tui/components/AgentStateIcon.tsx +0 -84
  183. package/src/tui/components/AnimatedBranch.tsx +0 -134
  184. package/src/tui/components/ChatPanel.tsx +0 -125
  185. package/src/tui/components/DAGPanel.tsx +0 -208
  186. package/src/tui/components/ExecutionTimeline.tsx +0 -225
  187. package/src/tui/components/Header.tsx +0 -109
  188. package/src/tui/components/HelpOverlay.tsx +0 -140
  189. package/src/tui/components/InputBar.tsx +0 -69
  190. package/src/tui/components/LogsPanel.tsx +0 -129
  191. package/src/tui/components/MemoryPanel.tsx +0 -163
  192. package/src/tui/components/MetricsPanel.tsx +0 -149
  193. package/src/tui/components/StatusPanel.tsx +0 -137
  194. package/src/tui/components/TaskTree.tsx +0 -159
  195. package/src/tui/components/animations/ProgressBar.tsx +0 -160
  196. package/src/tui/components/animations/Pulse.tsx +0 -73
  197. package/src/tui/components/animations/Spinner.tsx +0 -54
  198. package/src/tui/components/animations/StatusAnimator.tsx +0 -153
  199. package/src/tui/components/animations/TypingEffect.tsx +0 -119
  200. package/src/tui/components/animations/index.ts +0 -16
  201. package/src/tui/hooks/useAnimation.ts +0 -290
  202. package/src/tui/hooks/useAppState.ts +0 -403
  203. package/src/tui/index.ts +0 -9
  204. package/src/tui/services/orchestrator.ts +0 -195
  205. package/src/tui/styles/borders.ts +0 -51
  206. package/src/tui/styles/colors.ts +0 -19
  207. package/src/tui/styles/index.ts +0 -20
  208. package/src/tui/styles/indicators.ts +0 -54
  209. package/src/tui/styles/layout.ts +0 -44
  210. package/src/tui/styles/providers.ts +0 -32
  211. package/src/tui/utils/animation.ts +0 -124
  212. package/src/vendor-manifests.ts +0 -113
  213. package/src/ws-relay.ts +0 -156
  214. package/tsconfig.json +0 -28
@@ -1,109 +0,0 @@
1
- import React, { memo, useMemo } from "react";
2
- import { Box, Text } from "ink";
3
- import { tuiColors, getStatusIndicator, getProviderTag } from "../styles/index.js";
4
- import { StatusPulse } from "./animations/index.js";
5
-
6
- interface HeaderProps {
7
- projectName: string;
8
- agentCount: number;
9
- provider: string;
10
- status: "ready" | "running" | "error";
11
- tick: number;
12
- activePanel: string;
13
- }
14
-
15
- const PANEL_NAMES: Record<string, string> = {
16
- chat: "CHAT",
17
- dag: "DAG",
18
- status: "STATUS",
19
- logs: "LOGS",
20
- metrics: "METRICS",
21
- memory: "MEMORY",
22
- };
23
-
24
- const PANELS = ["chat", "dag", "logs", "metrics", "memory"] as const;
25
-
26
- export const Header = memo(function Header({
27
- projectName,
28
- agentCount,
29
- provider,
30
- status,
31
- tick,
32
- activePanel
33
- }: HeaderProps) {
34
- const statusInfo = useMemo(() => getStatusIndicator(status), [status]);
35
- const providerInfo = useMemo(() => getProviderTag(provider), [provider]);
36
-
37
- const statusText = status === "ready" ? "ONLINE" : status === "running" ? "RUNNING" : "ERROR";
38
- const statusColor = status === "ready"
39
- ? tuiColors.success
40
- : status === "running"
41
- ? tuiColors.warning
42
- : tuiColors.error;
43
-
44
- const pulseStatus = status === "ready"
45
- ? "online"
46
- : status === "running"
47
- ? "running"
48
- : "error";
49
-
50
- const panelElements = useMemo(() =>
51
- PANELS.map((panel) => (
52
- <Box key={panel} marginRight={1}>
53
- <Text
54
- color={activePanel === panel ? tuiColors.primary : tuiColors.textTertiary}
55
- bold={activePanel === panel}
56
- >
57
- [{PANEL_NAMES[panel]}]
58
- </Text>
59
- </Box>
60
- )),
61
- [activePanel]
62
- );
63
-
64
- return (
65
- <Box flexDirection="column" width="100%">
66
- <Box
67
- flexDirection="row"
68
- justifyContent="space-between"
69
- alignItems="center"
70
- paddingX={1}
71
- borderStyle="single"
72
- borderColor={tuiColors.border}
73
- >
74
- <Box flexDirection="row" alignItems="center">
75
- <Text color={tuiColors.primary} bold>■</Text>
76
- <Text color={tuiColors.textPrimary} bold> RAXFLOW</Text>
77
- <Text color={tuiColors.textSecondary}> HUB</Text>
78
- </Box>
79
- <Box flexDirection="row" alignItems="center" gap={1}>
80
- <Text color={tuiColors.textTertiary}>Project:</Text>
81
- <Text color={tuiColors.textPrimary}> {projectName}</Text>
82
- <Text color={tuiColors.textQuaternary}> │</Text>
83
- <Text color={tuiColors.textTertiary}> Agents:</Text>
84
- <Text color={tuiColors.success}> {agentCount}/12</Text>
85
- <Text color={tuiColors.textQuaternary}> │</Text>
86
- <Text color={tuiColors.textSecondary}>{providerInfo.code}</Text>
87
- <Text color={statusColor}> </Text>
88
- <StatusPulse status={pulseStatus} tick={tick} />
89
- <Text color={statusColor}> {statusText}</Text>
90
- </Box>
91
- </Box>
92
-
93
- <Box borderStyle="single" borderColor={tuiColors.primary} paddingX={1}>
94
- <Text color={tuiColors.textTertiary} italic>
95
- Orchestrator that Evolves with Your Host Tools
96
- </Text>
97
- </Box>
98
-
99
- <Box flexDirection="row" paddingX={1} justifyContent="space-between">
100
- <Box flexDirection="row">
101
- {panelElements}
102
- </Box>
103
- <Box flexDirection="row">
104
- <Text color={tuiColors.textQuaternary}>Tab:Switch │ ←:View │ ?:Help │ Ctrl+C:Quit</Text>
105
- </Box>
106
- </Box>
107
- </Box>
108
- );
109
- });
@@ -1,140 +0,0 @@
1
- import React, { memo, useMemo } from "react";
2
- import { Box, Text } from "ink";
3
- import { tuiColors } from "../styles/index.js";
4
-
5
- interface HelpOverlayProps {
6
- onDismiss: () => void;
7
- }
8
-
9
- const COMMAND_SECTIONS = [
10
- {
11
- title: "EXECUTION",
12
- items: [
13
- ["run <prompt>", "Execute workflow"],
14
- ["run -w <file>", "With blueprint"],
15
- ["run -p <n>", "Max parallel agents"],
16
- ["retry", "Relaunch last workflow"],
17
- ["stop / pause", "Control execution"],
18
- ],
19
- },
20
- {
21
- title: "NAVIGATION",
22
- items: [
23
- ["status", "System overview"],
24
- ["agents", "Agent list & status"],
25
- ["providers", "Provider status"],
26
- ["workflows", "Available blueprints"],
27
- ["memory", "QSGM graph view"],
28
- ],
29
- },
30
- {
31
- title: "MONITORING",
32
- items: [
33
- ["logs", "Real-time logs"],
34
- ["logs -f", "Follow mode"],
35
- ["metrics", "Performance stats"],
36
- ["evolve", "Evolution history"],
37
- ["doctor", "System diagnostic"],
38
- ],
39
- },
40
- ];
41
-
42
- const KEYBOARD_SHORTCUTS = [
43
- ["Tab", "Cycle panels"],
44
- ["F1-F8", "Jump to panel"],
45
- ["Ctrl+C", "Quit"],
46
- ["Esc", "Close overlay"],
47
- ["?", "Toggle help"],
48
- ];
49
-
50
- const FUNCTION_KEYS = [
51
- { key: "F1", label: "Help" },
52
- { key: "F2", label: "Agents" },
53
- { key: "F3", label: "Providers" },
54
- { key: "F4", label: "Workflows" },
55
- { key: "F5", label: "Logs" },
56
- { key: "F6", label: "Metrics" },
57
- { key: "F7", label: "Memory" },
58
- { key: "F8", label: "Dashboard" },
59
- ];
60
-
61
- export const HelpOverlay = memo(function HelpOverlay({ onDismiss }: HelpOverlayProps) {
62
- const functionKeyElements = useMemo(() =>
63
- FUNCTION_KEYS.map((fn) => (
64
- <Box key={fn.key} marginRight={2}>
65
- <Text color={tuiColors.primary}>[{fn.key}]</Text>
66
- <Text color={tuiColors.textSecondary}> {fn.label}</Text>
67
- </Box>
68
- )),
69
- []
70
- );
71
-
72
- const sectionElements = useMemo(() =>
73
- COMMAND_SECTIONS.map((section) => (
74
- <Box key={section.title} flexDirection="column" width={28} marginRight={2}>
75
- <Text color={tuiColors.primary} bold>┌─ {section.title} ──────────────</Text>
76
- <Box flexDirection="column" marginTop={1}>
77
- {section.items.map(([cmd, desc]) => (
78
- <Box key={cmd} flexDirection="row" marginBottom={1}>
79
- <Text color={tuiColors.textPrimary}>{cmd.padEnd(14)}</Text>
80
- <Text color={tuiColors.textTertiary}>{desc}</Text>
81
- </Box>
82
- ))}
83
- </Box>
84
- </Box>
85
- )),
86
- []
87
- );
88
-
89
- const shortcutElements = useMemo(() =>
90
- KEYBOARD_SHORTCUTS.map(([key, action]) => (
91
- <Box key={key} marginRight={3}>
92
- <Text color={tuiColors.textPrimary}>[{key.padEnd(6)}]</Text>
93
- <Text color={tuiColors.textTertiary}> {action}</Text>
94
- </Box>
95
- )),
96
- []
97
- );
98
-
99
- return (
100
- <Box
101
- flexDirection="column"
102
- flexGrow={1}
103
- borderStyle="single"
104
- borderColor={tuiColors.primary}
105
- paddingX={2}
106
- >
107
- <Box marginBottom={1}>
108
- <Text color={tuiColors.primary} bold>■ RAXFLOW HELP</Text>
109
- <Text color={tuiColors.textTertiary}> ── Press [Esc] or [q] to close</Text>
110
- </Box>
111
-
112
- <Box borderStyle="single" borderColor={tuiColors.border} marginBottom={1}>
113
- <Text color={tuiColors.textTertiary}>
114
- Orchestrator that Evolves with Your Host Tools
115
- </Text>
116
- </Box>
117
-
118
- <Box flexDirection="row" marginBottom={1}>
119
- {functionKeyElements}
120
- </Box>
121
-
122
- <Box flexDirection="row" flexGrow={1}>
123
- {sectionElements}
124
- </Box>
125
-
126
- <Box marginTop={1}>
127
- <Text color={tuiColors.primary} bold>┌─ KEYBOARD ─────────────────────────────────────</Text>
128
- </Box>
129
- <Box flexDirection="row">
130
- {shortcutElements}
131
- </Box>
132
-
133
- <Box borderStyle="single" borderColor={tuiColors.border} marginTop={1}>
134
- <Text color={tuiColors.textTertiary}>
135
- Type your prompt to execute a workflow, or use /run "..." for explicit execution
136
- </Text>
137
- </Box>
138
- </Box>
139
- );
140
- });
@@ -1,69 +0,0 @@
1
- import React, { useState, memo, useMemo, useCallback } from "react";
2
- import { Box, Text } from "ink";
3
- import TextInput from "ink-text-input";
4
- import { tuiColors } from "../styles/index.js";
5
-
6
- interface InputBarProps {
7
- onSubmit: (input: string) => void;
8
- suggestions: string[];
9
- isProcessing: boolean;
10
- projectName: string;
11
- }
12
-
13
- export const InputBar = memo(function InputBar({ onSubmit, suggestions, isProcessing, projectName }: InputBarProps) {
14
- const [input, setInput] = useState("");
15
-
16
- const handleSubmit = useCallback((value: string) => {
17
- if (value.trim()) {
18
- onSubmit(value);
19
- setInput("");
20
- }
21
- }, [onSubmit]);
22
-
23
- const handleChange = useCallback((value: string) => {
24
- setInput(value);
25
- }, []);
26
-
27
- const filteredSuggestions = useMemo(() =>
28
- suggestions.filter((s) =>
29
- s.toLowerCase().startsWith(input.toLowerCase())
30
- ).slice(0, 5),
31
- [suggestions, input]
32
- );
33
-
34
- const showSuggestions = input.startsWith("/") && filteredSuggestions.length > 0;
35
-
36
- return (
37
- <Box flexDirection="column" borderStyle="single" borderColor={tuiColors.border} paddingX={1}>
38
- {showSuggestions && (
39
- <Box flexDirection="row" marginBottom={1}>
40
- {filteredSuggestions.map((s) => (
41
- <Box key={s} marginRight={2}>
42
- <Text color={tuiColors.primary}>{s}</Text>
43
- </Box>
44
- ))}
45
- </Box>
46
- )}
47
- <Box flexDirection="row" alignItems="center">
48
- <Text color={tuiColors.primary} bold>raxflow://</Text>
49
- <Text color={tuiColors.textSecondary}>{projectName}</Text>
50
- <Text color={tuiColors.textPrimary}> &gt; </Text>
51
- <Box flexGrow={1}>
52
- <TextInput
53
- value={input}
54
- onChange={handleChange}
55
- onSubmit={handleSubmit}
56
- placeholder="Enter prompt or /help..."
57
- showCursor={true}
58
- />
59
- </Box>
60
- {isProcessing && <Text color={tuiColors.warning}> ●</Text>}
61
- </Box>
62
- <Box flexDirection="row" marginTop={1}>
63
- <Text color={tuiColors.textQuaternary}>[Ctrl+C] Quit</Text>
64
- <Text color={tuiColors.textQuaternary}> │ [/cmd] Commands</Text>
65
- <Text color={tuiColors.textQuaternary}> │ [?] Help</Text>
66
- </Box>
67
- </Box>
68
- );
69
- });
@@ -1,129 +0,0 @@
1
- import React, { useState, useEffect, memo, useRef, useMemo } from "react";
2
- import { Box, Text } from "ink";
3
- import { tuiColors, logStatusTags } from "../styles/index.js";
4
- import { Spinner } from "./animations/index.js";
5
-
6
- interface LogsPanelProps {
7
- logs: string[];
8
- isActive: boolean;
9
- isStreaming?: boolean;
10
- }
11
-
12
- const MAX_DISPLAYED_LOGS = 12;
13
- const HIGHLIGHT_DURATION = 2000;
14
-
15
- interface ParsedLog {
16
- time: string;
17
- tag: string;
18
- message: string;
19
- color: string;
20
- }
21
-
22
- function parseLogLine(log: string): ParsedLog | null {
23
- const timeMatch = log.match(/\[(\d{2}:\d{2}:\d{2}(?:\.\d+)?)\]/);
24
- const tagMatch = log.match(/\[(\w+)\]/g);
25
-
26
- if (!timeMatch || !tagMatch || tagMatch.length < 2) {
27
- return null;
28
- }
29
-
30
- const time = timeMatch[1];
31
- const tag = tagMatch[1].replace(/[\[\]]/g, "").toUpperCase();
32
-
33
- const tagConfig = Object.values(logStatusTags).find(t => t.tag.toUpperCase().includes(tag));
34
- const color = tagConfig?.color || tuiColors.textTertiary;
35
-
36
- const messageStart = log.indexOf(tagMatch[1]) + tagMatch[1].length;
37
- const message = log.slice(messageStart).trim();
38
-
39
- return { time, tag, message, color };
40
- }
41
-
42
- interface LogLineProps {
43
- log: string;
44
- isNew?: boolean;
45
- }
46
-
47
- const LogLine = memo(function LogLine({ log, isNew }: LogLineProps) {
48
- const parsed = useMemo(() => parseLogLine(log), [log]);
49
-
50
- if (!parsed) {
51
- return <Text color={tuiColors.textPrimary}>{log}</Text>;
52
- }
53
-
54
- const paddedTag = useMemo(() => parsed.tag.padEnd(7), [parsed.tag]);
55
-
56
- return (
57
- <Box flexDirection="row">
58
- <Text color={tuiColors.textTertiary}>[{parsed.time}]</Text>
59
- <Text color={parsed.color} bold> [{paddedTag}]</Text>
60
- <Text color={isNew ? tuiColors.textPrimary : tuiColors.textSecondary}> {parsed.message}</Text>
61
- </Box>
62
- );
63
- });
64
-
65
- export const LogsPanel = memo(function LogsPanel({ logs, isActive, isStreaming = false }: LogsPanelProps) {
66
- const borderColor = isActive ? tuiColors.primary : tuiColors.border;
67
- const [highlightedIndex, setHighlightedIndex] = useState<number | null>(null);
68
- const timeoutRef = useRef<NodeJS.Timeout | null>(null);
69
-
70
- const displayLogs = useMemo(() => logs.slice(-MAX_DISPLAYED_LOGS), [logs]);
71
-
72
- useEffect(() => {
73
- if (logs.length === 0) return;
74
-
75
- if (timeoutRef.current) clearTimeout(timeoutRef.current);
76
-
77
- setHighlightedIndex(logs.length - 1);
78
- timeoutRef.current = setTimeout(() => {
79
- setHighlightedIndex(null);
80
- }, HIGHLIGHT_DURATION);
81
-
82
- return () => {
83
- if (timeoutRef.current) clearTimeout(timeoutRef.current);
84
- };
85
- }, [logs.length]);
86
-
87
- const logElements = useMemo(() =>
88
- displayLogs.map((log, index) => {
89
- const logIndex = logs.length - MAX_DISPLAYED_LOGS + index;
90
- const isNew = logIndex === highlightedIndex;
91
- return <LogLine key={`${logIndex}-${index}`} log={log} isNew={isNew} />;
92
- }),
93
- [displayLogs, logs.length, highlightedIndex]
94
- );
95
-
96
- return (
97
- <Box
98
- flexDirection="column"
99
- flexGrow={1}
100
- borderStyle="single"
101
- borderColor={borderColor}
102
- paddingX={1}
103
- >
104
- <Box marginBottom={1}>
105
- <Text color={tuiColors.primary} bold>┌─</Text>
106
- <Text color={tuiColors.primary} bold> LOGS_STREAM </Text>
107
- <Text color={tuiColors.textTertiary}>────────────────────────────</Text>
108
- {isStreaming && (
109
- <Box flexDirection="row">
110
- <Text color={tuiColors.warning}> </Text>
111
- <Spinner type="dots" color={tuiColors.warning} />
112
- </Box>
113
- )}
114
- </Box>
115
- <Box flexDirection="column" flexGrow={1} overflow="hidden">
116
- {logElements}
117
- {logs.length === 0 && (
118
- <Text color={tuiColors.textTertiary}>No logs. Start a workflow to see logs.</Text>
119
- )}
120
- {isStreaming && logs.length === 0 && (
121
- <Box flexDirection="row">
122
- <Spinner type="dots" color={tuiColors.warning} />
123
- <Text color={tuiColors.textTertiary}> Waiting for logs...</Text>
124
- </Box>
125
- )}
126
- </Box>
127
- </Box>
128
- );
129
- });
@@ -1,163 +0,0 @@
1
- import React, { memo, useMemo } from "react";
2
- import { Box, Text } from "ink";
3
- import { tuiColors, treeChars } from "../styles/index.js";
4
- import { Pulse } from "./animations/index.js";
5
-
6
- interface MemoryNode {
7
- id: string;
8
- type: string;
9
- label: string;
10
- }
11
-
12
- interface MemoryEdge {
13
- from: string;
14
- to: string;
15
- }
16
-
17
- interface MemoryPanelProps {
18
- nodes?: MemoryNode[];
19
- edges?: MemoryEdge[];
20
- nodeCount?: number;
21
- cacheHitRate?: number;
22
- isActive?: boolean;
23
- tick?: number;
24
- }
25
-
26
- const DEFAULT_NODES: MemoryNode[] = [
27
- { id: "1", type: "action", label: "code_gen" },
28
- { id: "2", type: "file", label: "auth.ts" },
29
- { id: "3", type: "task", label: "login" },
30
- { id: "4", type: "test", label: "auth.test" },
31
- { id: "5", type: "fix", label: "patch_001" },
32
- ];
33
-
34
- const DEFAULT_EDGES: MemoryEdge[] = [
35
- { from: "1", to: "2" },
36
- { from: "2", to: "3" },
37
- { from: "3", to: "4" },
38
- { from: "4", to: "5" },
39
- { from: "2", to: "5" },
40
- ];
41
-
42
- const NODE_TYPE_COLORS: Record<string, string> = {
43
- action: tuiColors.primary,
44
- file: tuiColors.success,
45
- task: tuiColors.warning,
46
- test: tuiColors.textSecondary,
47
- fix: tuiColors.error,
48
- };
49
-
50
- interface NodeTypeBadgeProps {
51
- type: string;
52
- isActive?: boolean;
53
- }
54
-
55
- const NodeTypeBadge = memo(function NodeTypeBadge({ type, isActive }: NodeTypeBadgeProps) {
56
- const color = NODE_TYPE_COLORS[type] || tuiColors.textTertiary;
57
- return (
58
- <Box flexDirection="row">
59
- {isActive && <Pulse interval={400} color={color} type="pulse" />}
60
- <Text color={color}>[{type}]</Text>
61
- </Box>
62
- );
63
- });
64
-
65
- export const MemoryPanel = memo(function MemoryPanel({
66
- nodes,
67
- edges,
68
- nodeCount = 0,
69
- cacheHitRate = 0,
70
- isActive = false,
71
- tick = 0
72
- }: MemoryPanelProps) {
73
- const borderColor = isActive ? tuiColors.primary : tuiColors.border;
74
-
75
- const displayNodes = (nodes && nodes.length > 0) ? nodes : DEFAULT_NODES;
76
- const displayEdges = (edges && edges.length > 0) ? edges : DEFAULT_EDGES;
77
- const displayNodeCount = nodeCount > 0 ? nodeCount : 247;
78
- const displayCacheHitRate = cacheHitRate > 0 ? cacheHitRate : 94;
79
-
80
- const activeNodeIndex = isActive ? tick % 4 : -1;
81
-
82
- const nodeElements = useMemo(() =>
83
- displayNodes.slice(0, 4).map((node, idx) => {
84
- const isLast = idx === Math.min(3, displayNodes.length - 1);
85
- const isNodeActive = idx === activeNodeIndex;
86
- return (
87
- <Box key={node.id} flexDirection="row">
88
- <Text color={tuiColors.textTertiary}>{treeChars.vertical} </Text>
89
- <NodeTypeBadge type={node.type} isActive={isNodeActive} />
90
- <Text color={tuiColors.textPrimary}> {node.label}</Text>
91
- {!isLast && (
92
- <Text color={tuiColors.primary}> ──▶</Text>
93
- )}
94
- </Box>
95
- );
96
- }),
97
- [displayNodes, activeNodeIndex]
98
- );
99
-
100
- const edgeElements = useMemo(() =>
101
- displayEdges.slice(0, 3).map((edge, i) => {
102
- const fromNode = displayNodes.find((n) => n.id === edge.from);
103
- const toNode = displayNodes.find((n) => n.id === edge.to);
104
- return (
105
- <Box key={i} flexDirection="row">
106
- <Text color={tuiColors.textSecondary}>{treeChars.branch}</Text>
107
- <Text color={tuiColors.textPrimary}> {fromNode?.label || "?"}</Text>
108
- <Text color={tuiColors.primary}> ──▶ </Text>
109
- <Text color={tuiColors.textPrimary}>{toNode?.label || "?"}</Text>
110
- </Box>
111
- );
112
- }),
113
- [displayEdges, displayNodes]
114
- );
115
-
116
- const mutationCount = useMemo(() => Math.floor(Math.random() * 4) + 1, [tick]);
117
-
118
- return (
119
- <Box
120
- flexDirection="column"
121
- flexGrow={1}
122
- borderStyle="single"
123
- borderColor={borderColor}
124
- paddingX={1}
125
- >
126
- <Box marginBottom={1}>
127
- <Text color={tuiColors.primary} bold>┌─</Text>
128
- <Text color={tuiColors.primary} bold> QSGM </Text>
129
- <Text color={tuiColors.textTertiary}>── nodes: {displayNodeCount} ──</Text>
130
- {isActive && <Pulse interval={500} color={tuiColors.primary} type="pulse" />}
131
- </Box>
132
-
133
- <Box flexDirection="column">
134
- <Text color={tuiColors.textTertiary} bold>QUANTUM_SEMANTIC_GRAPH_MEMORY</Text>
135
- </Box>
136
-
137
- <Box flexDirection="column" marginTop={1}>
138
- <Text color={tuiColors.textTertiary} bold>GRAPH VISUALIZATION</Text>
139
- <Box flexDirection="column" marginTop={1}>
140
- {nodeElements}
141
- </Box>
142
- </Box>
143
-
144
- <Box flexDirection="column" marginTop={1}>
145
- <Text color={tuiColors.textTertiary} bold>CONNECTIONS</Text>
146
- <Box flexDirection="column" marginTop={1}>
147
- {edgeElements}
148
- </Box>
149
- </Box>
150
-
151
- <Box marginTop={1}>
152
- <Text color={tuiColors.textTertiary}>├─ STATS ───────────────────</Text>
153
- </Box>
154
- <Box flexDirection="row">
155
- <Text color={tuiColors.textSecondary}>Cache Hit:</Text>
156
- <Text color={tuiColors.success}> </Text>
157
- <Pulse interval={800} color={tuiColors.success} type="breath" />
158
- <Text color={tuiColors.success}> {displayCacheHitRate}%</Text>
159
- <Text color={tuiColors.textTertiary}> │ Mutations: +{mutationCount}</Text>
160
- </Box>
161
- </Box>
162
- );
163
- });