@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
  [![CI](https://github.com/runloopai/rl-cli/actions/workflows/ci.yml/badge.svg)](https://github.com/runloopai/rl-cli/actions/workflows/ci.yml)
5
5
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
6
6
 
7
- A beautiful CLI for managing Runloop built with Ink and TypeScript. Use it as an **interactive command-line application** with rich UI components, or as a **traditional CLI** for scripting and automation.
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
- - 🎯 Organized command structure with aliases
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(() => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@runloop/rl-cli",
3
- "version": "0.10.0",
3
+ "version": "1.1.0",
4
4
  "description": "Beautiful CLI for the Runloop platform",
5
5
  "type": "module",
6
6
  "bin": {