@ranker/raxflow 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.
- package/dashboard/index.html +420 -0
- package/dist/benchmark.d.ts.map +1 -0
- package/dist/benchmark.js +123 -0
- package/dist/benchmark.js.map +1 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +141 -0
- package/dist/bin.js.map +1 -0
- package/dist/bootstrap.d.ts.map +1 -0
- package/dist/bootstrap.js +22 -0
- package/dist/bootstrap.js.map +1 -0
- package/dist/bridge-adapter-templates.d.ts.map +1 -0
- package/dist/bridge-adapter-templates.js +185 -0
- package/dist/bridge-adapter-templates.js.map +1 -0
- package/dist/bridge-test.d.ts.map +1 -0
- package/dist/bridge-test.js +89 -0
- package/dist/bridge-test.js.map +1 -0
- package/dist/dashboard.d.ts.map +1 -0
- package/dist/dashboard.js +49 -0
- package/dist/dashboard.js.map +1 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +70 -0
- package/dist/doctor.js.map +1 -0
- package/dist/evolve.d.ts.map +1 -0
- package/dist/evolve.js +48 -0
- package/dist/evolve.js.map +1 -0
- package/dist/host-init-templates.d.ts.map +1 -0
- package/dist/host-init-templates.js +119 -0
- package/dist/host-init-templates.js.map +1 -0
- package/dist/hub/__tests__/commands.test.d.ts.map +1 -0
- package/dist/hub/__tests__/commands.test.js +72 -0
- package/dist/hub/__tests__/commands.test.js.map +1 -0
- package/dist/hub/__tests__/history.test.d.ts.map +1 -0
- package/dist/hub/__tests__/history.test.js +119 -0
- package/dist/hub/__tests__/history.test.js.map +1 -0
- package/dist/hub/__tests__/parser.test.d.ts.map +1 -0
- package/dist/hub/__tests__/parser.test.js +92 -0
- package/dist/hub/__tests__/parser.test.js.map +1 -0
- package/dist/hub/chat/ChatApp.d.ts +2 -0
- package/dist/hub/chat/ChatApp.d.ts.map +1 -0
- package/dist/hub/chat/ChatApp.js +146 -0
- package/dist/hub/chat/ChatApp.js.map +1 -0
- package/dist/hub/chat/components/ChatInput.d.ts +9 -0
- package/dist/hub/chat/components/ChatInput.d.ts.map +1 -0
- package/dist/hub/chat/components/ChatInput.js +19 -0
- package/dist/hub/chat/components/ChatInput.js.map +1 -0
- package/dist/hub/chat/components/MessageList.d.ts +7 -0
- package/dist/hub/chat/components/MessageList.d.ts.map +1 -0
- package/dist/hub/chat/components/MessageList.js +6 -0
- package/dist/hub/chat/components/MessageList.js.map +1 -0
- package/dist/hub/chat/context.d.ts.map +1 -0
- package/dist/hub/chat/context.js +42 -0
- package/dist/hub/chat/context.js.map +1 -0
- package/dist/hub/chat/hooks/useChatHistory.d.ts +7 -0
- package/dist/hub/chat/hooks/useChatHistory.d.ts.map +1 -0
- package/dist/hub/chat/hooks/useChatHistory.js +31 -0
- package/dist/hub/chat/hooks/useChatHistory.js.map +1 -0
- package/dist/hub/chat/index.d.ts.map +1 -0
- package/dist/hub/chat/index.js +7 -0
- package/dist/hub/chat/index.js.map +1 -0
- package/dist/hub/chat/intent-parser.d.ts.map +1 -0
- package/dist/hub/chat/intent-parser.js +48 -0
- package/dist/hub/chat/intent-parser.js.map +1 -0
- package/dist/hub/chat/types.d.ts.map +1 -0
- package/dist/hub/chat/types.js +2 -0
- package/dist/hub/chat/types.js.map +1 -0
- package/dist/hub/commands/agents.d.ts.map +1 -0
- package/dist/hub/commands/agents.js +36 -0
- package/dist/hub/commands/agents.js.map +1 -0
- package/dist/hub/commands/index.d.ts.map +1 -0
- package/dist/hub/commands/index.js +123 -0
- package/dist/hub/commands/index.js.map +1 -0
- package/dist/hub/commands/logs.d.ts.map +1 -0
- package/dist/hub/commands/logs.js +53 -0
- package/dist/hub/commands/logs.js.map +1 -0
- package/dist/hub/commands/memory.d.ts.map +1 -0
- package/dist/hub/commands/memory.js +40 -0
- package/dist/hub/commands/memory.js.map +1 -0
- package/dist/hub/commands/metrics.d.ts.map +1 -0
- package/dist/hub/commands/metrics.js +35 -0
- package/dist/hub/commands/metrics.js.map +1 -0
- package/dist/hub/commands/providers.d.ts.map +1 -0
- package/dist/hub/commands/providers.js +26 -0
- package/dist/hub/commands/providers.js.map +1 -0
- package/dist/hub/commands/run.d.ts.map +1 -0
- package/dist/hub/commands/run.js +31 -0
- package/dist/hub/commands/run.js.map +1 -0
- package/dist/hub/commands/status.d.ts.map +1 -0
- package/dist/hub/commands/status.js +61 -0
- package/dist/hub/commands/status.js.map +1 -0
- package/dist/hub/commands/workflows.d.ts.map +1 -0
- package/dist/hub/commands/workflows.js +45 -0
- package/dist/hub/commands/workflows.js.map +1 -0
- package/dist/hub/config-loader.d.ts.map +1 -0
- package/dist/hub/config-loader.js +27 -0
- package/dist/hub/config-loader.js.map +1 -0
- package/dist/hub/event-listener.d.ts +6 -0
- package/dist/hub/event-listener.d.ts.map +1 -0
- package/dist/hub/event-listener.js +12 -0
- package/dist/hub/event-listener.js.map +1 -0
- package/dist/hub/history.d.ts.map +1 -0
- package/dist/hub/history.js +59 -0
- package/dist/hub/history.js.map +1 -0
- package/dist/hub/index.d.ts.map +1 -0
- package/dist/hub/index.js +114 -0
- package/dist/hub/index.js.map +1 -0
- package/dist/hub/parser.d.ts.map +1 -0
- package/dist/hub/parser.js +98 -0
- package/dist/hub/parser.js.map +1 -0
- package/dist/hub/styles/borders.d.ts.map +1 -0
- package/dist/hub/styles/borders.js +64 -0
- package/dist/hub/styles/borders.js.map +1 -0
- package/dist/hub/styles/colors.d.ts.map +1 -0
- package/dist/hub/styles/colors.js +115 -0
- package/dist/hub/styles/colors.js.map +1 -0
- package/dist/hub/styles/typography.d.ts.map +1 -0
- package/dist/hub/styles/typography.js +60 -0
- package/dist/hub/styles/typography.js.map +1 -0
- package/dist/hub/tui/App.d.ts +2 -0
- package/dist/hub/tui/App.d.ts.map +1 -0
- package/dist/hub/tui/App.js +53 -0
- package/dist/hub/tui/App.js.map +1 -0
- package/dist/hub/tui/components/AgentQueue.d.ts +6 -0
- package/dist/hub/tui/components/AgentQueue.d.ts.map +1 -0
- package/dist/hub/tui/components/AgentQueue.js +20 -0
- package/dist/hub/tui/components/AgentQueue.js.map +1 -0
- package/dist/hub/tui/components/DAGPanel.d.ts +16 -0
- package/dist/hub/tui/components/DAGPanel.d.ts.map +1 -0
- package/dist/hub/tui/components/DAGPanel.js +51 -0
- package/dist/hub/tui/components/DAGPanel.js.map +1 -0
- package/dist/hub/tui/components/Header.d.ts +7 -0
- package/dist/hub/tui/components/Header.d.ts.map +1 -0
- package/dist/hub/tui/components/Header.js +17 -0
- package/dist/hub/tui/components/Header.js.map +1 -0
- package/dist/hub/tui/components/LogsPanel.d.ts +6 -0
- package/dist/hub/tui/components/LogsPanel.d.ts.map +1 -0
- package/dist/hub/tui/components/LogsPanel.js +26 -0
- package/dist/hub/tui/components/LogsPanel.js.map +1 -0
- package/dist/hub/tui/components/StatusBar.d.ts +8 -0
- package/dist/hub/tui/components/StatusBar.d.ts.map +1 -0
- package/dist/hub/tui/components/StatusBar.js +7 -0
- package/dist/hub/tui/components/StatusBar.js.map +1 -0
- package/dist/hub/tui/hooks/useEvents.d.ts +2 -0
- package/dist/hub/tui/hooks/useEvents.d.ts.map +1 -0
- package/dist/hub/tui/hooks/useEvents.js +13 -0
- package/dist/hub/tui/hooks/useEvents.js.map +1 -0
- package/dist/hub/tui/index.d.ts.map +1 -0
- package/dist/hub/tui/index.js +7 -0
- package/dist/hub/tui/index.js.map +1 -0
- package/dist/hub/tui/types.d.ts.map +1 -0
- package/dist/hub/tui/types.js +2 -0
- package/dist/hub/tui/types.js.map +1 -0
- package/dist/hub/types.d.ts.map +1 -0
- package/dist/hub/types.js +2 -0
- package/dist/hub/types.js.map +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/init-host.d.ts.map +1 -0
- package/dist/init-host.js +232 -0
- package/dist/init-host.js.map +1 -0
- package/dist/install.d.ts.map +1 -0
- package/dist/install.js +99 -0
- package/dist/install.js.map +1 -0
- package/dist/run.d.ts.map +1 -0
- package/dist/run.js +238 -0
- package/dist/run.js.map +1 -0
- package/dist/setup/components/ApiKeyInput.d.ts +25 -0
- package/dist/setup/components/ApiKeyInput.d.ts.map +1 -0
- package/dist/setup/components/ApiKeyInput.js +54 -0
- package/dist/setup/components/ApiKeyInput.js.map +1 -0
- package/dist/setup/components/AsciiBanner.d.ts +22 -0
- package/dist/setup/components/AsciiBanner.d.ts.map +1 -0
- package/dist/setup/components/AsciiBanner.js +55 -0
- package/dist/setup/components/AsciiBanner.js.map +1 -0
- package/dist/setup/components/CliDetector.d.ts +17 -0
- package/dist/setup/components/CliDetector.d.ts.map +1 -0
- package/dist/setup/components/CliDetector.js +79 -0
- package/dist/setup/components/CliDetector.js.map +1 -0
- package/dist/setup/components/ModeSelector.d.ts +8 -0
- package/dist/setup/components/ModeSelector.d.ts.map +1 -0
- package/dist/setup/components/ModeSelector.js +76 -0
- package/dist/setup/components/ModeSelector.js.map +1 -0
- package/dist/setup/components/ProviderSelector.d.ts +18 -0
- package/dist/setup/components/ProviderSelector.d.ts.map +1 -0
- package/dist/setup/components/ProviderSelector.js +97 -0
- package/dist/setup/components/ProviderSelector.js.map +1 -0
- package/dist/setup/components/SetupWizard.d.ts +2 -0
- package/dist/setup/components/SetupWizard.d.ts.map +1 -0
- package/dist/setup/components/SetupWizard.js +212 -0
- package/dist/setup/components/SetupWizard.js.map +1 -0
- package/dist/setup/components/StepIndicator.d.ts +13 -0
- package/dist/setup/components/StepIndicator.d.ts.map +1 -0
- package/dist/setup/components/StepIndicator.js +18 -0
- package/dist/setup/components/StepIndicator.js.map +1 -0
- package/dist/setup/components/SuccessScreen.d.ts +18 -0
- package/dist/setup/components/SuccessScreen.d.ts.map +1 -0
- package/dist/setup/components/SuccessScreen.js +38 -0
- package/dist/setup/components/SuccessScreen.js.map +1 -0
- package/dist/setup/index.d.ts +12 -0
- package/dist/setup/index.d.ts.map +1 -0
- package/dist/setup/index.js +29 -0
- package/dist/setup/index.js.map +1 -0
- package/dist/setup/utils/cli-detection.d.ts +12 -0
- package/dist/setup/utils/cli-detection.d.ts.map +1 -0
- package/dist/setup/utils/cli-detection.js +83 -0
- package/dist/setup/utils/cli-detection.js.map +1 -0
- package/dist/setup/utils/config-writer.d.ts +43 -0
- package/dist/setup/utils/config-writer.d.ts.map +1 -0
- package/dist/setup/utils/config-writer.js +180 -0
- package/dist/setup/utils/config-writer.js.map +1 -0
- package/dist/styles.d.ts.map +1 -0
- package/dist/styles.js +12 -0
- package/dist/styles.js.map +1 -0
- package/dist/tui/App.d.ts +3 -0
- package/dist/tui/App.d.ts.map +1 -0
- package/dist/tui/App.js +131 -0
- package/dist/tui/App.js.map +1 -0
- package/dist/tui/components/AgentStateIcon.d.ts +18 -0
- package/dist/tui/components/AgentStateIcon.d.ts.map +1 -0
- package/dist/tui/components/AgentStateIcon.js +57 -0
- package/dist/tui/components/AgentStateIcon.js.map +1 -0
- package/dist/tui/components/AnimatedBranch.d.ts +39 -0
- package/dist/tui/components/AnimatedBranch.d.ts.map +1 -0
- package/dist/tui/components/AnimatedBranch.js +64 -0
- package/dist/tui/components/AnimatedBranch.js.map +1 -0
- package/dist/tui/components/ChatPanel.d.ts +16 -0
- package/dist/tui/components/ChatPanel.d.ts.map +1 -0
- package/dist/tui/components/ChatPanel.js +50 -0
- package/dist/tui/components/ChatPanel.js.map +1 -0
- package/dist/tui/components/DAGPanel.d.ts +36 -0
- package/dist/tui/components/DAGPanel.d.ts.map +1 -0
- package/dist/tui/components/DAGPanel.js +51 -0
- package/dist/tui/components/DAGPanel.js.map +1 -0
- package/dist/tui/components/ExecutionTimeline.d.ts +34 -0
- package/dist/tui/components/ExecutionTimeline.d.ts.map +1 -0
- package/dist/tui/components/ExecutionTimeline.js +67 -0
- package/dist/tui/components/ExecutionTimeline.js.map +1 -0
- package/dist/tui/components/Header.d.ts +12 -0
- package/dist/tui/components/Header.d.ts.map +1 -0
- package/dist/tui/components/Header.js +32 -0
- package/dist/tui/components/Header.js.map +1 -0
- package/dist/tui/components/HelpOverlay.d.ts +7 -0
- package/dist/tui/components/HelpOverlay.d.ts.map +1 -0
- package/dist/tui/components/HelpOverlay.js +60 -0
- package/dist/tui/components/HelpOverlay.js.map +1 -0
- package/dist/tui/components/InputBar.d.ts +10 -0
- package/dist/tui/components/InputBar.d.ts.map +1 -0
- package/dist/tui/components/InputBar.js +21 -0
- package/dist/tui/components/InputBar.js.map +1 -0
- package/dist/tui/components/LogsPanel.d.ts +9 -0
- package/dist/tui/components/LogsPanel.d.ts.map +1 -0
- package/dist/tui/components/LogsPanel.js +56 -0
- package/dist/tui/components/LogsPanel.js.map +1 -0
- package/dist/tui/components/MemoryPanel.d.ts +21 -0
- package/dist/tui/components/MemoryPanel.d.ts.map +1 -0
- package/dist/tui/components/MemoryPanel.js +51 -0
- package/dist/tui/components/MemoryPanel.js.map +1 -0
- package/dist/tui/components/MetricsPanel.d.ts +18 -0
- package/dist/tui/components/MetricsPanel.d.ts.map +1 -0
- package/dist/tui/components/MetricsPanel.js +27 -0
- package/dist/tui/components/MetricsPanel.js.map +1 -0
- package/dist/tui/components/StatusPanel.d.ts +23 -0
- package/dist/tui/components/StatusPanel.d.ts.map +1 -0
- package/dist/tui/components/StatusPanel.js +23 -0
- package/dist/tui/components/StatusPanel.js.map +1 -0
- package/dist/tui/components/TaskTree.d.ts +28 -0
- package/dist/tui/components/TaskTree.d.ts.map +1 -0
- package/dist/tui/components/TaskTree.js +29 -0
- package/dist/tui/components/TaskTree.js.map +1 -0
- package/dist/tui/components/animations/ProgressBar.d.ts +39 -0
- package/dist/tui/components/animations/ProgressBar.d.ts.map +1 -0
- package/dist/tui/components/animations/ProgressBar.js +39 -0
- package/dist/tui/components/animations/ProgressBar.js.map +1 -0
- package/dist/tui/components/animations/Pulse.d.ts +17 -0
- package/dist/tui/components/animations/Pulse.d.ts.map +1 -0
- package/dist/tui/components/animations/Pulse.js +47 -0
- package/dist/tui/components/animations/Pulse.js.map +1 -0
- package/dist/tui/components/animations/Spinner.d.ts +13 -0
- package/dist/tui/components/animations/Spinner.d.ts.map +1 -0
- package/dist/tui/components/animations/Spinner.js +36 -0
- package/dist/tui/components/animations/Spinner.js.map +1 -0
- package/dist/tui/components/animations/StatusAnimator.d.ts +27 -0
- package/dist/tui/components/animations/StatusAnimator.d.ts.map +1 -0
- package/dist/tui/components/animations/StatusAnimator.js +85 -0
- package/dist/tui/components/animations/StatusAnimator.js.map +1 -0
- package/dist/tui/components/animations/TypingEffect.d.ts +26 -0
- package/dist/tui/components/animations/TypingEffect.d.ts.map +1 -0
- package/dist/tui/components/animations/TypingEffect.js +59 -0
- package/dist/tui/components/animations/TypingEffect.js.map +1 -0
- package/dist/tui/components/animations/index.d.ts +8 -0
- package/dist/tui/components/animations/index.d.ts.map +1 -0
- package/dist/tui/components/animations/index.js +6 -0
- package/dist/tui/components/animations/index.js.map +1 -0
- package/dist/tui/hooks/useAnimation.d.ts +42 -0
- package/dist/tui/hooks/useAnimation.d.ts.map +1 -0
- package/dist/tui/hooks/useAnimation.js +212 -0
- package/dist/tui/hooks/useAnimation.js.map +1 -0
- package/dist/tui/hooks/useAppState.d.ts +65 -0
- package/dist/tui/hooks/useAppState.d.ts.map +1 -0
- package/dist/tui/hooks/useAppState.js +293 -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/dist/tui/services/orchestrator.d.ts +16 -0
- package/dist/tui/services/orchestrator.d.ts.map +1 -0
- package/dist/tui/services/orchestrator.js +152 -0
- package/dist/tui/services/orchestrator.js.map +1 -0
- package/dist/tui/styles/borders.d.ts +31 -0
- package/dist/tui/styles/borders.d.ts.map +1 -0
- package/dist/tui/styles/borders.js +47 -0
- package/dist/tui/styles/borders.js.map +1 -0
- package/dist/tui/styles/colors.d.ts +18 -0
- package/dist/tui/styles/colors.d.ts.map +1 -0
- package/dist/tui/styles/colors.js +18 -0
- package/dist/tui/styles/colors.js.map +1 -0
- package/dist/tui/styles/index.d.ts +6 -0
- package/dist/tui/styles/index.d.ts.map +1 -0
- package/dist/tui/styles/index.js +6 -0
- package/dist/tui/styles/index.js.map +1 -0
- package/dist/tui/styles/indicators.d.ts +67 -0
- package/dist/tui/styles/indicators.d.ts.map +1 -0
- package/dist/tui/styles/indicators.js +42 -0
- package/dist/tui/styles/indicators.js.map +1 -0
- package/dist/tui/styles/layout.d.ts +21 -0
- package/dist/tui/styles/layout.d.ts.map +1 -0
- package/dist/tui/styles/layout.js +42 -0
- package/dist/tui/styles/layout.js.map +1 -0
- package/dist/tui/styles/providers.d.ts +77 -0
- package/dist/tui/styles/providers.d.ts.map +1 -0
- package/dist/tui/styles/providers.js +31 -0
- package/dist/tui/styles/providers.js.map +1 -0
- package/dist/tui/utils/animation.d.ts +44 -0
- package/dist/tui/utils/animation.d.ts.map +1 -0
- package/dist/tui/utils/animation.js +107 -0
- package/dist/tui/utils/animation.js.map +1 -0
- package/dist/vendor-manifests.d.ts.map +1 -0
- package/dist/vendor-manifests.js +94 -0
- package/dist/vendor-manifests.js.map +1 -0
- package/dist/ws-relay.d.ts +12 -0
- package/dist/ws-relay.d.ts.map +1 -0
- package/dist/ws-relay.js +148 -0
- package/dist/ws-relay.js.map +1 -0
- package/package.json +34 -0
- package/src/benchmark.ts +156 -0
- package/src/bin.ts +156 -0
- package/src/bootstrap.ts +36 -0
- package/src/bridge-adapter-templates.ts +181 -0
- package/src/bridge-test.ts +107 -0
- package/src/dashboard.ts +51 -0
- package/src/doctor.ts +92 -0
- package/src/evolve.ts +74 -0
- package/src/host-init-templates.ts +134 -0
- package/src/hub/__tests__/commands.test.ts +84 -0
- package/src/hub/__tests__/history.test.ts +137 -0
- package/src/hub/__tests__/parser.test.ts +105 -0
- package/src/hub/commands/agents.ts +53 -0
- package/src/hub/commands/index.ts +140 -0
- package/src/hub/commands/logs.ts +70 -0
- package/src/hub/commands/memory.ts +47 -0
- package/src/hub/commands/metrics.ts +49 -0
- package/src/hub/commands/providers.ts +39 -0
- package/src/hub/commands/run.ts +37 -0
- package/src/hub/commands/status.ts +69 -0
- package/src/hub/commands/workflows.ts +64 -0
- package/src/hub/config-loader.ts +37 -0
- package/src/hub/event-listener.ts +17 -0
- package/src/hub/history.ts +66 -0
- package/src/hub/index.ts +132 -0
- package/src/hub/parser.ts +107 -0
- package/src/hub/styles/borders.ts +74 -0
- package/src/hub/styles/colors.ts +129 -0
- package/src/hub/styles/typography.ts +68 -0
- package/src/hub/types.ts +31 -0
- package/src/index.ts +10 -0
- package/src/init-host.ts +285 -0
- package/src/install.ts +118 -0
- package/src/run.ts +317 -0
- package/src/setup/components/ApiKeyInput.tsx +158 -0
- package/src/setup/components/AsciiBanner.tsx +125 -0
- package/src/setup/components/CliDetector.tsx +230 -0
- package/src/setup/components/ModeSelector.tsx +137 -0
- package/src/setup/components/ProviderSelector.tsx +174 -0
- package/src/setup/components/SetupWizard.tsx +368 -0
- package/src/setup/components/StepIndicator.tsx +74 -0
- package/src/setup/components/SuccessScreen.tsx +229 -0
- package/src/setup/index.ts +34 -0
- package/src/setup/utils/cli-detection.ts +99 -0
- package/src/setup/utils/config-writer.ts +249 -0
- package/src/styles.ts +12 -0
- package/src/tui/App.tsx +177 -0
- package/src/tui/components/AgentStateIcon.tsx +84 -0
- package/src/tui/components/AnimatedBranch.tsx +134 -0
- package/src/tui/components/ChatPanel.tsx +125 -0
- package/src/tui/components/DAGPanel.tsx +208 -0
- package/src/tui/components/ExecutionTimeline.tsx +225 -0
- package/src/tui/components/Header.tsx +109 -0
- package/src/tui/components/HelpOverlay.tsx +140 -0
- package/src/tui/components/InputBar.tsx +69 -0
- package/src/tui/components/LogsPanel.tsx +129 -0
- package/src/tui/components/MemoryPanel.tsx +163 -0
- package/src/tui/components/MetricsPanel.tsx +149 -0
- package/src/tui/components/StatusPanel.tsx +137 -0
- package/src/tui/components/TaskTree.tsx +159 -0
- package/src/tui/components/animations/ProgressBar.tsx +160 -0
- package/src/tui/components/animations/Pulse.tsx +73 -0
- package/src/tui/components/animations/Spinner.tsx +54 -0
- package/src/tui/components/animations/StatusAnimator.tsx +153 -0
- package/src/tui/components/animations/TypingEffect.tsx +119 -0
- package/src/tui/components/animations/index.ts +16 -0
- package/src/tui/hooks/useAnimation.ts +290 -0
- package/src/tui/hooks/useAppState.ts +403 -0
- package/src/tui/index.ts +9 -0
- package/src/tui/services/orchestrator.ts +195 -0
- package/src/tui/styles/borders.ts +51 -0
- package/src/tui/styles/colors.ts +19 -0
- package/src/tui/styles/index.ts +20 -0
- package/src/tui/styles/indicators.ts +54 -0
- package/src/tui/styles/layout.ts +44 -0
- package/src/tui/styles/providers.ts +32 -0
- package/src/tui/utils/animation.ts +124 -0
- package/src/vendor-manifests.ts +113 -0
- package/src/ws-relay.ts +156 -0
- package/tsconfig.json +28 -0
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
// RAXFLOW Design System - Colors
|
|
2
|
+
// Based on cli-design.md specifications
|
|
3
|
+
|
|
4
|
+
export const colors = {
|
|
5
|
+
// Backgrounds
|
|
6
|
+
background: "#050505",
|
|
7
|
+
surface: "#0a0a0a",
|
|
8
|
+
surfaceElev: "#0d0d0d",
|
|
9
|
+
|
|
10
|
+
// Primary
|
|
11
|
+
primary: "#f97316", // Orange vif
|
|
12
|
+
primaryGlow: "rgba(249, 115, 22, 0.3)",
|
|
13
|
+
primaryGlowHover: "rgba(249, 115, 22, 0.5)",
|
|
14
|
+
|
|
15
|
+
// Text
|
|
16
|
+
textPrimary: "#ffffff",
|
|
17
|
+
textSecondary: "#a1a1aa",
|
|
18
|
+
textTertiary: "#71717a",
|
|
19
|
+
textQuaternary: "#3f3f46",
|
|
20
|
+
|
|
21
|
+
// Status
|
|
22
|
+
success: "#22c55e",
|
|
23
|
+
warning: "#f59e0b",
|
|
24
|
+
error: "#ef4444",
|
|
25
|
+
|
|
26
|
+
// Borders
|
|
27
|
+
border: "#27272a",
|
|
28
|
+
|
|
29
|
+
// Mutations
|
|
30
|
+
mutation: "#f59e0b",
|
|
31
|
+
mutationGlow: "rgba(245, 158, 11, 0.4)",
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
// ANSI color codes for terminal
|
|
35
|
+
export const ansiColors = {
|
|
36
|
+
reset: "\x1b[0m",
|
|
37
|
+
bright: "\x1b[1m",
|
|
38
|
+
dim: "\x1b[2m",
|
|
39
|
+
|
|
40
|
+
// Foreground colors
|
|
41
|
+
black: "\x1b[30m",
|
|
42
|
+
red: "\x1b[31m",
|
|
43
|
+
green: "\x1b[32m",
|
|
44
|
+
yellow: "\x1b[33m",
|
|
45
|
+
blue: "\x1b[34m",
|
|
46
|
+
magenta: "\x1b[35m",
|
|
47
|
+
cyan: "\x1b[36m",
|
|
48
|
+
white: "\x1b[37m",
|
|
49
|
+
gray: "\x1b[90m",
|
|
50
|
+
|
|
51
|
+
// Bright colors
|
|
52
|
+
brightRed: "\x1b[91m",
|
|
53
|
+
brightGreen: "\x1b[92m",
|
|
54
|
+
brightYellow: "\x1b[93m",
|
|
55
|
+
brightBlue: "\x1b[94m",
|
|
56
|
+
brightMagenta: "\x1b[95m",
|
|
57
|
+
brightCyan: "\x1b[96m",
|
|
58
|
+
brightWhite: "\x1b[97m",
|
|
59
|
+
|
|
60
|
+
// Background colors
|
|
61
|
+
bgBlack: "\x1b[40m",
|
|
62
|
+
bgRed: "\x1b[41m",
|
|
63
|
+
bgGreen: "\x1b[42m",
|
|
64
|
+
bgYellow: "\x1b[43m",
|
|
65
|
+
bgBlue: "\x1b[44m",
|
|
66
|
+
bgMagenta: "\x1b[45m",
|
|
67
|
+
bgCyan: "\x1b[46m",
|
|
68
|
+
bgWhite: "\x1b[47m",
|
|
69
|
+
bgGray: "\x1b[100m",
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
// Status indicators
|
|
73
|
+
export const statusIndicators = {
|
|
74
|
+
online: "●",
|
|
75
|
+
offline: "○",
|
|
76
|
+
running: "▶",
|
|
77
|
+
loading: "◐",
|
|
78
|
+
mutation: "◆",
|
|
79
|
+
checkpoint: "■",
|
|
80
|
+
pending: "○",
|
|
81
|
+
done: "✓",
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
// Provider indicators
|
|
85
|
+
export const providerIndicators: Record<string, string> = {
|
|
86
|
+
host: "[H]",
|
|
87
|
+
claude: "[C]",
|
|
88
|
+
opencode: "[O]",
|
|
89
|
+
kilo: "[K]",
|
|
90
|
+
anthropic: "[A]",
|
|
91
|
+
gemini: "[G]",
|
|
92
|
+
mistral: "[M]",
|
|
93
|
+
groq: "[Q]",
|
|
94
|
+
openai: "[O]",
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
// Utility functions
|
|
98
|
+
export function colorize(text: string, color: keyof typeof ansiColors): string {
|
|
99
|
+
return `${ansiColors[color]}${text}${ansiColors.reset}`;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export function statusColor(status: string): string {
|
|
103
|
+
switch (status.toLowerCase()) {
|
|
104
|
+
case "online":
|
|
105
|
+
case "ready":
|
|
106
|
+
case "active":
|
|
107
|
+
case "done":
|
|
108
|
+
case "success":
|
|
109
|
+
return ansiColors.green;
|
|
110
|
+
case "running":
|
|
111
|
+
case "busy":
|
|
112
|
+
return ansiColors.yellow;
|
|
113
|
+
case "error":
|
|
114
|
+
case "failed":
|
|
115
|
+
return ansiColors.red;
|
|
116
|
+
case "queued":
|
|
117
|
+
case "pending":
|
|
118
|
+
case "idle":
|
|
119
|
+
return ansiColors.gray;
|
|
120
|
+
default:
|
|
121
|
+
return ansiColors.reset;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
export function formatStatus(status: string): string {
|
|
126
|
+
const indicator = statusIndicators[status.toLowerCase() as keyof typeof statusIndicators] || "○";
|
|
127
|
+
const color = statusColor(status);
|
|
128
|
+
return `${color}${indicator}${ansiColors.reset}`;
|
|
129
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
// RAXFLOW Design System - Typography
|
|
2
|
+
// Space Grotesk for titles, Space Mono for system text
|
|
3
|
+
|
|
4
|
+
export const typography = {
|
|
5
|
+
// Font families
|
|
6
|
+
primary: "Space Grotesk",
|
|
7
|
+
monospace: "Space Mono",
|
|
8
|
+
|
|
9
|
+
// Font weights
|
|
10
|
+
weights: {
|
|
11
|
+
light: 300,
|
|
12
|
+
regular: 400,
|
|
13
|
+
medium: 500,
|
|
14
|
+
bold: 700,
|
|
15
|
+
},
|
|
16
|
+
|
|
17
|
+
// Sizes (in terminal columns roughly)
|
|
18
|
+
sizes: {
|
|
19
|
+
hero: 4, // text-4xl
|
|
20
|
+
section: 2, // text-2xl
|
|
21
|
+
label: 0, // text-[10px]
|
|
22
|
+
body: 1, // text-sm
|
|
23
|
+
code: 0, // text-xs
|
|
24
|
+
status: -1, // text-[9px]
|
|
25
|
+
agent: 0, // text-xs
|
|
26
|
+
provider: -1, // text-[9px]
|
|
27
|
+
},
|
|
28
|
+
|
|
29
|
+
// Tracking (letter-spacing)
|
|
30
|
+
tracking: {
|
|
31
|
+
none: "",
|
|
32
|
+
tight: "",
|
|
33
|
+
normal: "",
|
|
34
|
+
wide: " ",
|
|
35
|
+
label: " ", // 0.15em equivalent in monospace
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
// Text formatting utilities for terminal
|
|
40
|
+
export function upperCase(text: string): string {
|
|
41
|
+
return text.toUpperCase();
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export function padCenter(text: string, width: number): string {
|
|
45
|
+
const padding = Math.max(0, width - text.length);
|
|
46
|
+
const leftPad = Math.floor(padding / 2);
|
|
47
|
+
const rightPad = padding - leftPad;
|
|
48
|
+
return " ".repeat(leftPad) + text + " ".repeat(rightPad);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export function padRight(text: string, width: number): string {
|
|
52
|
+
const padding = Math.max(0, width - text.length);
|
|
53
|
+
return text + " ".repeat(padding);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export function padLeft(text: string, width: number): string {
|
|
57
|
+
const padding = Math.max(0, width - text.length);
|
|
58
|
+
return " ".repeat(padding) + text;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export function truncate(text: string, maxLength: number): string {
|
|
62
|
+
if (text.length <= maxLength) return text;
|
|
63
|
+
return text.slice(0, maxLength - 3) + "...";
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export function formatLabel(text: string): string {
|
|
67
|
+
return upperCase(text).split("").join(" ");
|
|
68
|
+
}
|
package/src/hub/types.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export interface HubOptions {
|
|
2
|
+
cwd: string;
|
|
3
|
+
config?: HubConfig;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
export interface HubConfig {
|
|
7
|
+
project?: string;
|
|
8
|
+
providers?: string[];
|
|
9
|
+
theme?: 'industrial' | 'minimal' | 'high-contrast';
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export interface Command {
|
|
13
|
+
name: string;
|
|
14
|
+
args: string[];
|
|
15
|
+
flags: Record<string, string | boolean>;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export interface HubContext {
|
|
19
|
+
currentWorkflow?: string;
|
|
20
|
+
currentRun?: string;
|
|
21
|
+
config: HubConfig;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export type CommandHandler = (args: string[], flags: Record<string, string | boolean>, context: HubContext) => Promise<void>;
|
|
25
|
+
|
|
26
|
+
export interface CommandDefinition {
|
|
27
|
+
name: string;
|
|
28
|
+
description: string;
|
|
29
|
+
handler: CommandHandler;
|
|
30
|
+
aliases?: string[];
|
|
31
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export * from "./install.js";
|
|
2
|
+
export * from "./run.js";
|
|
3
|
+
export * from "./benchmark.js";
|
|
4
|
+
export * from "./doctor.js";
|
|
5
|
+
export * from "./bridge-test.js";
|
|
6
|
+
export * from "./init-host.js";
|
|
7
|
+
export * from "./bootstrap.js";
|
|
8
|
+
export * from "./host-init-templates.js";
|
|
9
|
+
export * from "./bridge-adapter-templates.js";
|
|
10
|
+
export * from "./vendor-manifests.js";
|
package/src/init-host.ts
ADDED
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
import { mkdir, writeFile } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { c } from "./styles.js";
|
|
4
|
+
import { HOST_TEMPLATES, HostTarget, buildBootstrapPrompt, listHostTargets, parseHostTarget } from "./host-init-templates.js";
|
|
5
|
+
import { generateVendorManifest, vendorManifestFilename, type HostManifestModel } from "./vendor-manifests.js";
|
|
6
|
+
import { bridgeAdapterFilename, renderBridgeAdapter } from "./bridge-adapter-templates.js";
|
|
7
|
+
|
|
8
|
+
interface InitHostOptions {
|
|
9
|
+
cwd: string;
|
|
10
|
+
target?: string;
|
|
11
|
+
printOnly?: boolean;
|
|
12
|
+
all?: boolean;
|
|
13
|
+
task?: string;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function bridgeCommand(adapterFile: string): string {
|
|
17
|
+
return `node ${adapterFile}`;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function renderSetupScript(command: string): string {
|
|
21
|
+
return [
|
|
22
|
+
"#!/usr/bin/env bash",
|
|
23
|
+
"set -e",
|
|
24
|
+
`export RAX_HOST_BRIDGE_COMMAND=\"${command}\"`,
|
|
25
|
+
'echo "RAX_HOST_BRIDGE_COMMAND configured"',
|
|
26
|
+
"echo \"Run: npx raxflow doctor\"",
|
|
27
|
+
"echo \"Run: npx raxflow run --prompt 'Build feature X' --stream\""
|
|
28
|
+
].join("\n");
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function renderInstructions(params: {
|
|
32
|
+
title: string;
|
|
33
|
+
envHint: string;
|
|
34
|
+
chatHint: string;
|
|
35
|
+
command: string;
|
|
36
|
+
adapterFile: string;
|
|
37
|
+
quickCommands: string[];
|
|
38
|
+
sessionEntryExamples: string[];
|
|
39
|
+
autoInjectMode: "native" | "scripted" | "manual";
|
|
40
|
+
task?: string;
|
|
41
|
+
}): string {
|
|
42
|
+
const taskSection = params.task?.trim()
|
|
43
|
+
? ["", "## Task context", `- ${params.task.trim()}`, "- Embedded into BOOTSTRAP_PROMPT.txt"]
|
|
44
|
+
: [];
|
|
45
|
+
|
|
46
|
+
return [
|
|
47
|
+
`# ${params.title} - Non-UI Initialization`,
|
|
48
|
+
"",
|
|
49
|
+
"## 1) Configure bridge command",
|
|
50
|
+
`- ${params.envHint}`,
|
|
51
|
+
`- Command: \`${params.command}\``,
|
|
52
|
+
`- Bridge adapter scaffold: \`${params.adapterFile}\``,
|
|
53
|
+
"- Replace callHostModel() with your editor runtime model call implementation.",
|
|
54
|
+
"- Configure bridge runtime values in `bridge-runtime-config.json`.",
|
|
55
|
+
"- Use `bridge-smoke-test.json` to validate structured response mapping.",
|
|
56
|
+
"",
|
|
57
|
+
"## 2) Chat bootstrap",
|
|
58
|
+
`- ${params.chatHint}`,
|
|
59
|
+
"- Use BOOTSTRAP_PROMPT.txt content.",
|
|
60
|
+
...taskSection,
|
|
61
|
+
"",
|
|
62
|
+
"## 3) Session launch patterns",
|
|
63
|
+
`- Auto inject mode: \`${params.autoInjectMode}\``,
|
|
64
|
+
...params.sessionEntryExamples.map((line) => `- \`${line}\``),
|
|
65
|
+
"",
|
|
66
|
+
"## 4) Validate",
|
|
67
|
+
...params.quickCommands.map((cmd) => `- \`${cmd}\``)
|
|
68
|
+
].join("\n");
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
function renderSessionStartScript(target: HostTarget, sessionEntryExamples: string[]): string {
|
|
72
|
+
const lines = [
|
|
73
|
+
"#!/usr/bin/env bash",
|
|
74
|
+
"set -e",
|
|
75
|
+
`echo \"RAXFLOW session starter (${target})\"`,
|
|
76
|
+
"echo \"Use one of these commands (adapt to your local CLI):\""
|
|
77
|
+
];
|
|
78
|
+
|
|
79
|
+
for (const entry of sessionEntryExamples) {
|
|
80
|
+
lines.push(`echo \"- ${entry}\"`);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
lines.push("echo \"If unsupported, copy/paste BOOTSTRAP_PROMPT.txt manually.\"");
|
|
84
|
+
return lines.join("\n");
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
function renderRuntimeConfig(target: HostTarget, task?: string): string {
|
|
88
|
+
const payload = {
|
|
89
|
+
version: 1,
|
|
90
|
+
vendor: target,
|
|
91
|
+
model: "host-managed",
|
|
92
|
+
endpoint: null,
|
|
93
|
+
authEnv: null,
|
|
94
|
+
structuredMode: "json",
|
|
95
|
+
timeoutMs: 20000,
|
|
96
|
+
taskContext: task?.trim() || null,
|
|
97
|
+
notes: [
|
|
98
|
+
"Fill endpoint/auth fields if your host runtime requires external transport.",
|
|
99
|
+
"If host runtime is in-process, keep endpoint null and call runtime SDK directly in bridge adapter."
|
|
100
|
+
]
|
|
101
|
+
};
|
|
102
|
+
return JSON.stringify(payload, null, 2);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
function renderBridgeSmokeTest(target: HostTarget): string {
|
|
106
|
+
const payload = {
|
|
107
|
+
version: 1,
|
|
108
|
+
action: "callStructured",
|
|
109
|
+
prompt: "Smoke test structured output",
|
|
110
|
+
schema: {
|
|
111
|
+
type: "object",
|
|
112
|
+
required: ["agent", "success", "confidence", "risks", "logs", "data"],
|
|
113
|
+
properties: {
|
|
114
|
+
agent: { type: "string" },
|
|
115
|
+
success: { type: "boolean" },
|
|
116
|
+
confidence: { type: "number" },
|
|
117
|
+
risks: { type: "array" },
|
|
118
|
+
logs: { type: "array" },
|
|
119
|
+
data: { type: "object" }
|
|
120
|
+
}
|
|
121
|
+
},
|
|
122
|
+
options: { model: "host-managed", temperature: 0, maxTokens: 256 },
|
|
123
|
+
meta: { target }
|
|
124
|
+
};
|
|
125
|
+
return JSON.stringify(payload, null, 2);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
function renderManifest(params: {
|
|
129
|
+
target: HostTarget;
|
|
130
|
+
title: string;
|
|
131
|
+
autoInjectMode: "native" | "scripted" | "manual";
|
|
132
|
+
bridgeCommand: string;
|
|
133
|
+
quickCommands: string[];
|
|
134
|
+
sessionEntryExamples: string[];
|
|
135
|
+
bootstrapPromptFile: string;
|
|
136
|
+
instructionsFile: string;
|
|
137
|
+
adapterFile: string;
|
|
138
|
+
runtimeConfigFile: string;
|
|
139
|
+
smokeTestFile: string;
|
|
140
|
+
vendorFile: string;
|
|
141
|
+
task?: string;
|
|
142
|
+
}): HostManifestModel {
|
|
143
|
+
return {
|
|
144
|
+
version: 2,
|
|
145
|
+
target: params.target,
|
|
146
|
+
title: params.title,
|
|
147
|
+
autoInjectMode: params.autoInjectMode,
|
|
148
|
+
bridgeCommand: params.bridgeCommand,
|
|
149
|
+
quickCommands: params.quickCommands,
|
|
150
|
+
sessionEntryExamples: params.sessionEntryExamples,
|
|
151
|
+
task: params.task ?? null,
|
|
152
|
+
files: {
|
|
153
|
+
bootstrapPrompt: params.bootstrapPromptFile,
|
|
154
|
+
instructions: params.instructionsFile,
|
|
155
|
+
bridgeAdapter: params.adapterFile,
|
|
156
|
+
bridgeRuntimeConfig: params.runtimeConfigFile,
|
|
157
|
+
bridgeSmokeTest: params.smokeTestFile,
|
|
158
|
+
vendorManifest: params.vendorFile
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
async function generateForTarget(cwd: string, target: HostTarget, task?: string): Promise<{ dir: string; bootstrapPrompt: string; quickCommands: string[] }> {
|
|
164
|
+
const template = HOST_TEMPLATES[target];
|
|
165
|
+
const baseDir = path.join(cwd, ".raxflow", "host-init", target);
|
|
166
|
+
const adapterFile = path.join(baseDir, bridgeAdapterFilename(target));
|
|
167
|
+
const command = bridgeCommand(adapterFile);
|
|
168
|
+
|
|
169
|
+
await mkdir(baseDir, { recursive: true });
|
|
170
|
+
|
|
171
|
+
const setupSh = renderSetupScript(command);
|
|
172
|
+
const sessionStartSh = renderSessionStartScript(target, template.sessionEntryExamples);
|
|
173
|
+
const bootstrapPrompt = buildBootstrapPrompt(target, task);
|
|
174
|
+
const bridgeAdapter = renderBridgeAdapter(target);
|
|
175
|
+
const instructions = renderInstructions({
|
|
176
|
+
title: template.title,
|
|
177
|
+
envHint: template.envHint,
|
|
178
|
+
chatHint: template.chatHint,
|
|
179
|
+
command,
|
|
180
|
+
adapterFile,
|
|
181
|
+
quickCommands: template.quickCommands,
|
|
182
|
+
sessionEntryExamples: template.sessionEntryExamples,
|
|
183
|
+
autoInjectMode: template.autoInjectMode,
|
|
184
|
+
task
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
const bootstrapPromptFile = path.join(baseDir, "BOOTSTRAP_PROMPT.txt");
|
|
188
|
+
const instructionsFile = path.join(baseDir, "INSTRUCTIONS.md");
|
|
189
|
+
const runtimeConfigFile = path.join(baseDir, "bridge-runtime-config.json");
|
|
190
|
+
const smokeTestFile = path.join(baseDir, "bridge-smoke-test.json");
|
|
191
|
+
const vendorFile = vendorManifestFilename(target);
|
|
192
|
+
const manifestObj = renderManifest({
|
|
193
|
+
target,
|
|
194
|
+
title: template.title,
|
|
195
|
+
autoInjectMode: template.autoInjectMode,
|
|
196
|
+
bridgeCommand: command,
|
|
197
|
+
quickCommands: template.quickCommands,
|
|
198
|
+
sessionEntryExamples: template.sessionEntryExamples,
|
|
199
|
+
bootstrapPromptFile,
|
|
200
|
+
instructionsFile,
|
|
201
|
+
adapterFile,
|
|
202
|
+
runtimeConfigFile,
|
|
203
|
+
smokeTestFile,
|
|
204
|
+
vendorFile: path.join(baseDir, vendorFile),
|
|
205
|
+
task
|
|
206
|
+
});
|
|
207
|
+
const manifest = JSON.stringify(manifestObj, null, 2);
|
|
208
|
+
const vendorManifest = generateVendorManifest(target, baseDir, manifestObj);
|
|
209
|
+
|
|
210
|
+
await writeFile(path.join(baseDir, "setup-bridge.sh"), `${setupSh}\n`, "utf8");
|
|
211
|
+
await writeFile(path.join(baseDir, "start-session.sh"), `${sessionStartSh}\n`, "utf8");
|
|
212
|
+
await writeFile(adapterFile, `${bridgeAdapter}\n`, "utf8");
|
|
213
|
+
await writeFile(runtimeConfigFile, `${renderRuntimeConfig(target, task)}\n`, "utf8");
|
|
214
|
+
await writeFile(smokeTestFile, `${renderBridgeSmokeTest(target)}\n`, "utf8");
|
|
215
|
+
await writeFile(bootstrapPromptFile, `${bootstrapPrompt}\n`, "utf8");
|
|
216
|
+
await writeFile(instructionsFile, `${instructions}\n`, "utf8");
|
|
217
|
+
await writeFile(path.join(baseDir, "host-manifest.json"), `${manifest}\n`, "utf8");
|
|
218
|
+
await writeFile(path.join(baseDir, vendorFile), `${JSON.stringify(vendorManifest, null, 2)}\n`, "utf8");
|
|
219
|
+
|
|
220
|
+
return { dir: baseDir, bootstrapPrompt, quickCommands: template.quickCommands };
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
async function generateSummary(cwd: string, generated: Array<{ target: HostTarget; dir: string }>, task?: string): Promise<string> {
|
|
224
|
+
const summaryFile = path.join(cwd, ".raxflow", "host-init", "INIT_SUMMARY.md");
|
|
225
|
+
const body = [
|
|
226
|
+
"# RAXFLOW Host Init Summary",
|
|
227
|
+
"",
|
|
228
|
+
...(task?.trim() ? ["Task context:", `- ${task.trim()}`, ""] : []),
|
|
229
|
+
"Generated targets:",
|
|
230
|
+
...generated.map((item) => `- ${item.target}: \`${item.dir}\``),
|
|
231
|
+
"",
|
|
232
|
+
"Recommended sequence:",
|
|
233
|
+
"1. Review bridge-adapter-*.mjs and wire host runtime in callHostModel",
|
|
234
|
+
"2. Source setup-bridge.sh for your target",
|
|
235
|
+
"3. Run start-session.sh for launch hints",
|
|
236
|
+
"4. Paste BOOTSTRAP_PROMPT.txt into chat start",
|
|
237
|
+
"5. Run `npx raxflow doctor`",
|
|
238
|
+
"6. Run `npx raxflow run --prompt \"Build feature X\" --stream`"
|
|
239
|
+
].join("\n");
|
|
240
|
+
await writeFile(summaryFile, `${body}\n`, "utf8");
|
|
241
|
+
return summaryFile;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
export async function runInitHost(options: InitHostOptions): Promise<number> {
|
|
245
|
+
const targets = options.all ? listHostTargets() : [parseHostTarget(options.target)];
|
|
246
|
+
|
|
247
|
+
if (options.printOnly) {
|
|
248
|
+
for (const target of targets) {
|
|
249
|
+
const template = HOST_TEMPLATES[target];
|
|
250
|
+
const bootstrapPrompt = buildBootstrapPrompt(target, options.task);
|
|
251
|
+
console.log(c.blue(`RAXFLOW Host Init (print) - ${target}`));
|
|
252
|
+
console.log(bootstrapPrompt);
|
|
253
|
+
console.log("quick commands:");
|
|
254
|
+
template.quickCommands.forEach((cmd) => console.log(`- ${cmd}`));
|
|
255
|
+
console.log("session launch patterns:");
|
|
256
|
+
template.sessionEntryExamples.forEach((line) => console.log(`- ${line}`));
|
|
257
|
+
}
|
|
258
|
+
return 0;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
const generated: Array<{ target: HostTarget; dir: string }> = [];
|
|
262
|
+
|
|
263
|
+
for (const target of targets) {
|
|
264
|
+
const out = await generateForTarget(options.cwd, target, options.task);
|
|
265
|
+
generated.push({ target, dir: out.dir });
|
|
266
|
+
console.log(c.blue("RAXFLOW Host Init"));
|
|
267
|
+
console.log(`target: ${target}`);
|
|
268
|
+
if (options.task?.trim()) {
|
|
269
|
+
console.log(`task context: ${options.task.trim()}`);
|
|
270
|
+
}
|
|
271
|
+
console.log(c.green(`Generated ${path.join(out.dir, "INSTRUCTIONS.md")}`));
|
|
272
|
+
console.log(c.green(`Generated ${path.join(out.dir, "BOOTSTRAP_PROMPT.txt")}`));
|
|
273
|
+
console.log(c.green(`Generated ${path.join(out.dir, "setup-bridge.sh")}`));
|
|
274
|
+
console.log(c.green(`Generated ${path.join(out.dir, "start-session.sh")}`));
|
|
275
|
+
console.log(c.green(`Generated ${path.join(out.dir, bridgeAdapterFilename(target))}`));
|
|
276
|
+
console.log(c.green(`Generated ${path.join(out.dir, "bridge-runtime-config.json")}`));
|
|
277
|
+
console.log(c.green(`Generated ${path.join(out.dir, "bridge-smoke-test.json")}`));
|
|
278
|
+
console.log(c.green(`Generated ${path.join(out.dir, "host-manifest.json")}`));
|
|
279
|
+
console.log(c.green(`Generated ${path.join(out.dir, vendorManifestFilename(target))}`));
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
const summary = await generateSummary(options.cwd, generated, options.task);
|
|
283
|
+
console.log(c.green(`Generated ${summary}`));
|
|
284
|
+
return 0;
|
|
285
|
+
}
|
package/src/install.ts
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { mkdir, writeFile, access, copyFile } from "node:fs/promises";
|
|
2
|
+
import { constants } from "node:fs";
|
|
3
|
+
import { execSync } from "node:child_process";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import os from "node:os";
|
|
6
|
+
import { c } from "./styles.js";
|
|
7
|
+
|
|
8
|
+
interface InstallOptions {
|
|
9
|
+
cwd: string;
|
|
10
|
+
openUi: boolean;
|
|
11
|
+
autoConfirm?: boolean;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
async function detectBridges(): Promise<string[]> {
|
|
15
|
+
const candidates = [
|
|
16
|
+
{ id: "claude-code", cmd: "claude-code --version" },
|
|
17
|
+
{ id: "codex", cmd: "codex --version" },
|
|
18
|
+
{ id: "opencode", cmd: "opencode --version" },
|
|
19
|
+
{ id: "kilo", cmd: "kilo --version" }
|
|
20
|
+
];
|
|
21
|
+
|
|
22
|
+
const detected: string[] = [];
|
|
23
|
+
for (const tool of candidates) {
|
|
24
|
+
try {
|
|
25
|
+
execSync(tool.cmd, { stdio: "ignore" });
|
|
26
|
+
detected.push(tool.id);
|
|
27
|
+
} catch {
|
|
28
|
+
// Not in path
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return detected;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
async function ensureRaxrc(targetDir: string, detectedBridge?: string): Promise<string> {
|
|
35
|
+
const file = path.join(targetDir, ".raxrc");
|
|
36
|
+
const body = {
|
|
37
|
+
version: 1,
|
|
38
|
+
defaultProvider: detectedBridge ? "host" : "openai",
|
|
39
|
+
strongProvider: "openai",
|
|
40
|
+
providers: {
|
|
41
|
+
host: {
|
|
42
|
+
model: detectedBridge ?? "host-managed",
|
|
43
|
+
mode: "auto",
|
|
44
|
+
bridgeCommand: detectedBridge ?? "claude-code", // Store direct command if found
|
|
45
|
+
bridgeCommandEnv: "RAX_HOST_BRIDGE_COMMAND"
|
|
46
|
+
},
|
|
47
|
+
openai: { model: "gpt-4o", apiKeyEnv: "OPENAI_API_KEY" },
|
|
48
|
+
claude: { model: "claude-3-5-sonnet-latest", apiKeyEnv: "ANTHROPIC_API_KEY" }
|
|
49
|
+
},
|
|
50
|
+
privacyMode: true,
|
|
51
|
+
verifyFixLoops: 3
|
|
52
|
+
};
|
|
53
|
+
await writeFile(file, `${JSON.stringify(body, null, 2)}\n`, "utf8");
|
|
54
|
+
return file;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
async function ensureExampleWorkflow(targetDir: string): Promise<string> {
|
|
58
|
+
const workflowsDir = path.join(targetDir, ".raxflow", "workflows");
|
|
59
|
+
await mkdir(workflowsDir, { recursive: true });
|
|
60
|
+
const file = path.join(workflowsDir, "fullstack-feature.json");
|
|
61
|
+
const sample = {
|
|
62
|
+
id: "fullstack-feature",
|
|
63
|
+
nodes: [
|
|
64
|
+
{ id: "analyze", agent: "IntentClassifierAgent", dependsOn: [] },
|
|
65
|
+
{ id: "spec", agent: "SpecAgent", dependsOn: ["analyze"] },
|
|
66
|
+
{ id: "implement", agent: "CodeGeneratorAgent", dependsOn: ["spec"] },
|
|
67
|
+
{ id: "verify", agent: "ValidatorAgent", dependsOn: ["implement"] }
|
|
68
|
+
]
|
|
69
|
+
};
|
|
70
|
+
await writeFile(file, `${JSON.stringify(sample, null, 2)}\n`, "utf8");
|
|
71
|
+
return file;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
async function validateEnvironment(): Promise<{ ok: boolean; missing: string[] }> {
|
|
75
|
+
const optional = ["OPENAI_API_KEY", "RAX_HOST_BRIDGE_COMMAND"];
|
|
76
|
+
const missing = optional.filter((k) => !process.env[k]);
|
|
77
|
+
return { ok: true, missing };
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export async function runInstall(options: InstallOptions): Promise<number> {
|
|
81
|
+
console.log(c.blue("RAXFLOW Installer - Professional Setup"));
|
|
82
|
+
|
|
83
|
+
console.log("- Scanning for local coding tools...");
|
|
84
|
+
const detected = await detectBridges();
|
|
85
|
+
if (detected.length > 0) {
|
|
86
|
+
console.log(c.green(` [OK] Detected: ${detected.join(", ")}`));
|
|
87
|
+
} else {
|
|
88
|
+
console.log(c.yellow(" [!] No local coding tools (Claude Code/Codex) detected in PATH."));
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
const primaryBridge = detected[0];
|
|
92
|
+
const raxrc = await ensureRaxrc(options.cwd, primaryBridge);
|
|
93
|
+
const workflow = await ensureExampleWorkflow(options.cwd);
|
|
94
|
+
|
|
95
|
+
console.log(c.green(`- Project Initialized: ${raxrc}`));
|
|
96
|
+
console.log(c.green(`- Default Blueprint Created: ${workflow}`));
|
|
97
|
+
|
|
98
|
+
const env = await validateEnvironment();
|
|
99
|
+
if (env.missing.length > 0) {
|
|
100
|
+
console.log(c.yellow(`- Note: Optional env vars missing: ${env.missing.join(", ")}`));
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
const localHome = path.join(os.homedir(), ".raxflow");
|
|
104
|
+
await mkdir(localHome, { recursive: true });
|
|
105
|
+
|
|
106
|
+
console.log("\n" + c.blue("--- Zero-Error Compliance Checklist ---"));
|
|
107
|
+
console.log(c.green("✓ Host Bridge Architecture: Scalable & Compliant"));
|
|
108
|
+
console.log(c.green("✓ Dynamic Planner: Enabled (Self-Optimizing)"));
|
|
109
|
+
console.log(c.green("✓ Long-term Memory: Configured"));
|
|
110
|
+
|
|
111
|
+
console.log("\n" + c.yellow("Next Logical Steps:"));
|
|
112
|
+
console.log("1. Run `raxflow doctor` to verify bridge connectivity.");
|
|
113
|
+
console.log("2. Launch a task: `raxflow run --prompt \"Implement feature Y\" --stream`.");
|
|
114
|
+
|
|
115
|
+
console.log("\n" + c.green("RAXFLOW is now the operational backbone of your CLI workflow."));
|
|
116
|
+
return 0;
|
|
117
|
+
}
|
|
118
|
+
|