@runloop/rl-cli 0.10.0 → 1.1.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/README.md
CHANGED
|
@@ -4,7 +4,13 @@
|
|
|
4
4
|
[](https://github.com/runloopai/rl-cli/actions/workflows/ci.yml)
|
|
5
5
|
[](LICENSE)
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
An interactive CLI for interacting with the [Runloop.ai](https://runloop.ai) platform. Use it as an **interactive command-line application** with rich UI components, or as a **traditional CLI** for scripting and automation.
|
|
8
|
+
|
|
9
|
+
📖 **[Full Documentation](https://docs.runloop.ai/docs/tools/cli)**
|
|
10
|
+
|
|
11
|
+
<p align="center">
|
|
12
|
+
<img src="https://raw.githubusercontent.com/runloopai/rl-cli/main/misc/demo.gif" alt="Runloop CLI Demo" width="800">
|
|
13
|
+
</p>
|
|
8
14
|
|
|
9
15
|
## Quick Example
|
|
10
16
|
|
|
@@ -23,8 +29,8 @@ rli devbox delete <devbox-id>
|
|
|
23
29
|
|
|
24
30
|
- ⚡ Fast and responsive with pagination
|
|
25
31
|
- 📦 Manage devboxes, snapshots, and blueprints
|
|
26
|
-
- 🚀 Execute commands in devboxes
|
|
27
|
-
- 🎯
|
|
32
|
+
- 🚀 Execute commands, ssh, view logs in devboxes
|
|
33
|
+
- 🎯 Traditional CLI with text, json, and yaml output modes.
|
|
28
34
|
- 🤖 **Model Context Protocol (MCP) server for AI integration**
|
|
29
35
|
|
|
30
36
|
## Installation
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Hook to handle Ctrl+C (SIGINT) consistently across all screens
|
|
2
|
+
* Hook to handle Ctrl+C (SIGINT) and Ctrl+D (EOF) consistently across all screens
|
|
3
3
|
* Exits the program with proper cleanup of alternate screen buffer
|
|
4
4
|
*/
|
|
5
5
|
import { useInput } from "ink";
|
|
@@ -11,5 +11,10 @@ export function useExitOnCtrlC() {
|
|
|
11
11
|
exitAlternateScreenBuffer();
|
|
12
12
|
processUtils.exit(130); // Standard exit code for SIGINT
|
|
13
13
|
}
|
|
14
|
+
// Handle Ctrl+D (EOF) same as Ctrl+C
|
|
15
|
+
if (key.ctrl && input === "d") {
|
|
16
|
+
exitAlternateScreenBuffer();
|
|
17
|
+
processUtils.exit(0); // Clean exit for EOF
|
|
18
|
+
}
|
|
14
19
|
});
|
|
15
20
|
}
|
|
@@ -40,7 +40,7 @@ export function SSHSessionScreen() {
|
|
|
40
40
|
"UserKnownHostsFile=/dev/null",
|
|
41
41
|
`${sshUser}@${url}`,
|
|
42
42
|
], [keyPath, proxyCommand, sshUser, url]);
|
|
43
|
-
return (_jsxs(_Fragment, { children: [_jsx(Breadcrumb, { items: [{ label: "SSH Session", active: true }] }), _jsxs(Box, { flexDirection: "column", paddingX: 1, marginBottom: 1, children: [_jsxs(Text, { color: colors.primary, bold: true, children: [figures.play, " Connecting to ", devboxName, "..."] }), _jsx(Text, { color: colors.textDim, dimColor: true, children: "Press Ctrl+C or type exit to disconnect" })] }), _jsx(InteractiveSpawn, { command: "ssh", args: sshArgs, onExit: (_code) => {
|
|
43
|
+
return (_jsxs(_Fragment, { children: [_jsx(Breadcrumb, { items: [{ label: "SSH Session", active: true }] }), _jsxs(Box, { flexDirection: "column", paddingX: 1, marginBottom: 1, children: [_jsxs(Text, { color: colors.primary, bold: true, children: [figures.play, " Connecting to ", devboxName, "..."] }), _jsx(Text, { color: colors.textDim, dimColor: true, children: "Press Ctrl+C, Ctrl+D, or type exit to disconnect" })] }), _jsx(InteractiveSpawn, { command: "ssh", args: sshArgs, onExit: (_code) => {
|
|
44
44
|
// Replace current screen (don't add SSH to history stack)
|
|
45
45
|
// Using replace() instead of navigate() prevents "escape goes back to SSH" bug
|
|
46
46
|
setTimeout(() => {
|