lobstercage-cli 0.3.1 → 0.4.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 +169 -21
- package/dist/commands/apikeys.d.ts.map +1 -1
- package/dist/commands/apikeys.js +14 -0
- package/dist/commands/apikeys.js.map +1 -1
- package/dist/commands/auth.d.ts +2 -1
- package/dist/commands/auth.d.ts.map +1 -1
- package/dist/commands/auth.js +33 -2
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/billing.d.ts.map +1 -1
- package/dist/commands/billing.js +25 -5
- package/dist/commands/billing.js.map +1 -1
- package/dist/commands/cages.d.ts +0 -1
- package/dist/commands/cages.d.ts.map +1 -1
- package/dist/commands/cages.js +20 -15
- package/dist/commands/cages.js.map +1 -1
- package/dist/commands/config.d.ts +25 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +148 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/env.d.ts.map +1 -1
- package/dist/commands/env.js +22 -0
- package/dist/commands/env.js.map +1 -1
- package/dist/commands/exec.d.ts +10 -2
- package/dist/commands/exec.d.ts.map +1 -1
- package/dist/commands/exec.js +64 -6
- package/dist/commands/exec.js.map +1 -1
- package/dist/commands/migrate.d.ts +28 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +314 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/proxy.d.ts.map +1 -1
- package/dist/commands/proxy.js +1 -0
- package/dist/commands/proxy.js.map +1 -1
- package/dist/commands/ssh-config.d.ts.map +1 -1
- package/dist/commands/ssh-config.js +5 -0
- package/dist/commands/ssh-config.js.map +1 -1
- package/dist/commands/tail.d.ts +5 -0
- package/dist/commands/tail.d.ts.map +1 -1
- package/dist/commands/tail.js +20 -0
- package/dist/commands/tail.js.map +1 -1
- package/dist/commands/tunnel.d.ts.map +1 -1
- package/dist/commands/tunnel.js +79 -21
- package/dist/commands/tunnel.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -10
- package/dist/index.js.map +1 -1
- package/dist/lib/api.d.ts +184 -2
- package/dist/lib/api.d.ts.map +1 -1
- package/dist/lib/api.js +206 -6
- package/dist/lib/api.js.map +1 -1
- package/dist/lib/config.d.ts +4 -2
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +10 -6
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/error-handler.d.ts.map +1 -1
- package/dist/lib/error-handler.js +24 -3
- package/dist/lib/error-handler.js.map +1 -1
- package/dist/lib/migrate/analyze.d.ts +15 -0
- package/dist/lib/migrate/analyze.d.ts.map +1 -0
- package/dist/lib/migrate/analyze.js +241 -0
- package/dist/lib/migrate/analyze.js.map +1 -0
- package/dist/lib/migrate/cost.d.ts +16 -0
- package/dist/lib/migrate/cost.d.ts.map +1 -0
- package/dist/lib/migrate/cost.js +68 -0
- package/dist/lib/migrate/cost.js.map +1 -0
- package/dist/lib/migrate/detect.d.ts +12 -0
- package/dist/lib/migrate/detect.d.ts.map +1 -0
- package/dist/lib/migrate/detect.js +392 -0
- package/dist/lib/migrate/detect.js.map +1 -0
- package/dist/lib/migrate/display.d.ts +14 -0
- package/dist/lib/migrate/display.d.ts.map +1 -0
- package/dist/lib/migrate/display.js +157 -0
- package/dist/lib/migrate/display.js.map +1 -0
- package/dist/lib/migrate/platform.d.ts +16 -0
- package/dist/lib/migrate/platform.d.ts.map +1 -0
- package/dist/lib/migrate/platform.js +178 -0
- package/dist/lib/migrate/platform.js.map +1 -0
- package/dist/lib/migrate/types.d.ts +84 -0
- package/dist/lib/migrate/types.d.ts.map +1 -0
- package/dist/lib/migrate/types.js +6 -0
- package/dist/lib/migrate/types.js.map +1 -0
- package/dist/lib/migrate/utils.d.ts +9 -0
- package/dist/lib/migrate/utils.d.ts.map +1 -0
- package/dist/lib/migrate/utils.js +19 -0
- package/dist/lib/migrate/utils.js.map +1 -0
- package/dist/lib/output.d.ts.map +1 -1
- package/dist/lib/output.js +3 -1
- package/dist/lib/output.js.map +1 -1
- package/dist/lib/ssh-errors.d.ts +5 -0
- package/dist/lib/ssh-errors.d.ts.map +1 -0
- package/dist/lib/ssh-errors.js +46 -0
- package/dist/lib/ssh-errors.js.map +1 -0
- package/dist/lib/utils.d.ts +4 -0
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/lib/utils.js +21 -0
- package/dist/lib/utils.js.map +1 -1
- package/dist/types/index.d.ts +7 -5
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# lobstercage-cli
|
|
2
2
|
|
|
3
|
-
Command-line interface for [LobsterCage](https://github.com/aptheon/lobster-cage)
|
|
3
|
+
Command-line interface for [LobsterCage](https://github.com/aptheon/lobster-cage) -- Secure AI Agent Sandboxes.
|
|
4
4
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
@@ -13,47 +13,195 @@ Requires Node.js >= 20.0.0.
|
|
|
13
13
|
## Quick Start
|
|
14
14
|
|
|
15
15
|
```bash
|
|
16
|
-
# Authenticate
|
|
17
|
-
lobster login
|
|
16
|
+
# Authenticate via browser
|
|
17
|
+
lobster login
|
|
18
18
|
|
|
19
19
|
# Deploy a new cage
|
|
20
20
|
lobster deploy my-cage
|
|
21
21
|
|
|
22
|
-
# Open an interactive shell
|
|
22
|
+
# Open an interactive SSH shell
|
|
23
23
|
lobster ssh my-cage
|
|
24
24
|
|
|
25
|
+
# Run a command inside a cage
|
|
26
|
+
lobster exec my-cage --local -- ls -la /workspace
|
|
27
|
+
|
|
25
28
|
# Tunnel a port to localhost
|
|
26
29
|
lobster tunnel my-cage --port 3000
|
|
27
30
|
|
|
28
|
-
#
|
|
29
|
-
lobster
|
|
31
|
+
# Stream lifecycle events
|
|
32
|
+
lobster tail my-cage
|
|
33
|
+
|
|
34
|
+
# Set up SSH config for `ssh agent@my-cage.lobster`
|
|
35
|
+
lobster ssh-config
|
|
30
36
|
```
|
|
31
37
|
|
|
38
|
+
## Global Flags
|
|
39
|
+
|
|
40
|
+
| Flag | Description |
|
|
41
|
+
| --- | --- |
|
|
42
|
+
| `--api-url <url>` | Override the API URL (default: `https://api.lobstercage.ai`) |
|
|
43
|
+
| `--debug` | Show detailed error information and stack traces |
|
|
44
|
+
| `--version` | Print CLI version |
|
|
45
|
+
| `--help` | Show help for any command |
|
|
46
|
+
|
|
32
47
|
## Commands
|
|
33
48
|
|
|
49
|
+
### Authentication
|
|
50
|
+
|
|
51
|
+
| Command | Description |
|
|
52
|
+
| --- | --- |
|
|
53
|
+
| `lobster login` | Login to LobsterCage via browser |
|
|
54
|
+
| `lobster logout` | Logout from LobsterCage |
|
|
55
|
+
| `lobster whoami` | Display current user information |
|
|
56
|
+
|
|
57
|
+
### Cage Lifecycle
|
|
58
|
+
|
|
34
59
|
| Command | Description |
|
|
35
60
|
| --- | --- |
|
|
36
|
-
| `lobster login` | Authenticate with LobsterCage |
|
|
37
61
|
| `lobster deploy <name>` | Create and start a new cage |
|
|
38
62
|
| `lobster list` | List all cages |
|
|
39
|
-
| `lobster status <name>` |
|
|
63
|
+
| `lobster status <name>` | Get cage status and details |
|
|
40
64
|
| `lobster start <name>` | Start a stopped cage |
|
|
41
65
|
| `lobster stop <name>` | Stop a running cage |
|
|
42
|
-
| `lobster hibernate <name>` | Hibernate a cage (preserves state) |
|
|
66
|
+
| `lobster hibernate <name>` | Hibernate a cage (preserves state and storage) |
|
|
43
67
|
| `lobster wake <name>` | Wake a hibernated cage |
|
|
44
|
-
| `lobster destroy <name>` |
|
|
45
|
-
| `lobster logs <name>` | View cage logs |
|
|
68
|
+
| `lobster destroy <name>` | Permanently delete a cage |
|
|
69
|
+
| `lobster logs <name>` | View cage logs (requires `--local`) |
|
|
70
|
+
| `lobster tail <name>` | Stream cage events in real-time |
|
|
71
|
+
|
|
72
|
+
### Connectivity
|
|
73
|
+
|
|
74
|
+
| Command | Description |
|
|
75
|
+
| --- | --- |
|
|
76
|
+
| `lobster ssh <name>` | SSH into a running cage (extra args passed to ssh) |
|
|
77
|
+
| `lobster tunnel <name>` | Create a secure tunnel to a cage port |
|
|
78
|
+
| `lobster dashboard <name>` | Open the OpenClaw dashboard for a running cage |
|
|
79
|
+
| `lobster port-forward <name>` | Forward a port from a cage via HTTPS proxy URL |
|
|
80
|
+
| `lobster exec <name> [cmd...]` | Execute a command in a cage (requires `--local`) |
|
|
81
|
+
| `lobster proxy <name>` | SSH ProxyCommand handler (used by SSH config, not invoked directly) |
|
|
82
|
+
| `lobster ssh-config` | Install SSH config for `*.lobster` hosts |
|
|
83
|
+
|
|
84
|
+
### Environment Variables
|
|
85
|
+
|
|
86
|
+
| Command | Description |
|
|
87
|
+
| --- | --- |
|
|
46
88
|
| `lobster env list <cage>` | List environment variables |
|
|
47
|
-
| `lobster env set <cage> KEY=VAL
|
|
48
|
-
| `lobster env get <cage> <key>` | Get an environment variable |
|
|
49
|
-
| `lobster env delete <cage> <key
|
|
50
|
-
| `lobster env scan <cage>` | Scan for
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
|
55
|
-
|
|
|
56
|
-
| `lobster
|
|
89
|
+
| `lobster env set <cage> KEY=VAL...` | Set environment variables |
|
|
90
|
+
| `lobster env get <cage> <key>` | Get an environment variable value |
|
|
91
|
+
| `lobster env delete <cage> <key...>` | Delete environment variables |
|
|
92
|
+
| `lobster env scan <cage>` | Scan for security issues in environment variables |
|
|
93
|
+
|
|
94
|
+
### API Keys
|
|
95
|
+
|
|
96
|
+
| Command | Description |
|
|
97
|
+
| --- | --- |
|
|
98
|
+
| `lobster apikeys list` | List all API keys |
|
|
99
|
+
| `lobster apikeys create <name>` | Create a new API key |
|
|
100
|
+
| `lobster apikeys revoke <keyId>` | Revoke an API key |
|
|
101
|
+
|
|
102
|
+
### Billing
|
|
103
|
+
|
|
104
|
+
| Command | Description |
|
|
105
|
+
| --- | --- |
|
|
106
|
+
| `lobster billing` | View billing status and credit usage |
|
|
107
|
+
| `lobster billing portal` | Open Stripe billing portal |
|
|
108
|
+
| `lobster upgrade` | Upgrade to Starter plan |
|
|
109
|
+
|
|
110
|
+
## Command Details
|
|
111
|
+
|
|
112
|
+
### `deploy`
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
lobster deploy my-cage # Default size, Ubuntu 22.04
|
|
116
|
+
lobster deploy my-cage --size standard # Standard tier (more CPU/RAM)
|
|
117
|
+
lobster deploy my-cage --image ubuntu:22.04 # Custom image
|
|
118
|
+
lobster deploy my-cage --egress deny-all # No outbound network
|
|
119
|
+
lobster deploy my-cage --egress allowlist --allow-host api.openai.com
|
|
120
|
+
lobster deploy my-cage --no-start # Create without starting
|
|
121
|
+
lobster deploy my-cage --local # Local Docker cage
|
|
122
|
+
lobster deploy my-cage --local --template ai-agent
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
Size tiers: `starter`, `standard`, `power`, `extreme`.
|
|
126
|
+
|
|
127
|
+
### `ssh`
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
lobster ssh my-cage # Interactive SSH session
|
|
131
|
+
lobster ssh my-cage -L 8080:localhost:8080 # SSH with local port forward
|
|
132
|
+
lobster ssh my-cage -- cat /etc/hostname # Run remote command
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
Uses `lobster proxy` as the SSH ProxyCommand internally. Cages use empty-password auth (the tunnel proxy is the real auth boundary).
|
|
136
|
+
|
|
137
|
+
### `ssh-config`
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
lobster ssh-config # Install config block in ~/.ssh/config
|
|
141
|
+
lobster ssh-config --print # Print config without installing
|
|
142
|
+
lobster ssh-config --remove # Remove LobsterCage config block
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
After installation, you can use standard SSH tooling:
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
ssh agent@my-cage.lobster
|
|
149
|
+
scp file.txt agent@my-cage.lobster:/workspace/
|
|
150
|
+
sftp agent@my-cage.lobster
|
|
151
|
+
# Also works with VS Code Remote SSH
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### `tunnel`
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
lobster tunnel my-cage --port 3000 # localhost:3000 -> cage:3000
|
|
158
|
+
lobster tunnel my-cage --port 8080 --local-port 9090 # localhost:9090 -> cage:8080
|
|
159
|
+
lobster tunnel my-cage --ssh # Shorthand for --port 22
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### `port-forward`
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
lobster port-forward my-cage --port 3000 # Get HTTPS proxy URL
|
|
166
|
+
lobster port-forward my-cage --port 3000 --local-port 3000 # Start local HTTP proxy
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
Alias: `lobster pf`.
|
|
170
|
+
|
|
171
|
+
### `tail`
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
lobster tail my-cage # Stream events (Ctrl+C to stop)
|
|
175
|
+
lobster tail my-cage -n 50 # Show last 50 events first
|
|
176
|
+
lobster tail my-cage --no-follow # Print history and exit
|
|
177
|
+
lobster tail my-cage --json # NDJSON output
|
|
178
|
+
lobster tail my-cage -v # Show event metadata
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### `exec`
|
|
182
|
+
|
|
183
|
+
```bash
|
|
184
|
+
lobster exec my-cage --local # Interactive shell (local Docker)
|
|
185
|
+
lobster exec my-cage --local -- ls -la # Run a command
|
|
186
|
+
lobster exec my-cage --local --shell sh # Force /bin/sh
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
Note: Remote exec is not available via the API. Use `lobster ssh` for remote access.
|
|
190
|
+
|
|
191
|
+
### `apikeys`
|
|
192
|
+
|
|
193
|
+
```bash
|
|
194
|
+
lobster apikeys list # List all keys
|
|
195
|
+
lobster apikeys create "My Key" # Create a key
|
|
196
|
+
lobster apikeys create "CI Key" --scope cages # Scoped key
|
|
197
|
+
lobster apikeys create "Temp" --expires 2026-04-01
|
|
198
|
+
lobster apikeys revoke lc_live_abc123 # Revoke (with confirmation)
|
|
199
|
+
lobster apikeys revoke lc_live_abc123 --force # Revoke without confirmation
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
### Common flags
|
|
203
|
+
|
|
204
|
+
Most commands support `--json` for machine-readable JSON output and `--local` for local Docker mode (where applicable).
|
|
57
205
|
|
|
58
206
|
## Documentation
|
|
59
207
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apikeys.d.ts","sourceRoot":"","sources":["../../src/commands/apikeys.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBnF;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAC9D,OAAO,CAAC,IAAI,CAAC,CAoBf;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAC3C,OAAO,CAAC,IAAI,CAAC,CAgCf;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"apikeys.d.ts","sourceRoot":"","sources":["../../src/commands/apikeys.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBnF;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAC9D,OAAO,CAAC,IAAI,CAAC,CAoBf;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAC3C,OAAO,CAAC,IAAI,CAAC,CAgCf;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwC3D"}
|
package/dist/commands/apikeys.js
CHANGED
|
@@ -143,6 +143,11 @@ function createApiKeyCommands(program) {
|
|
|
143
143
|
.alias('ls')
|
|
144
144
|
.description('List all API keys')
|
|
145
145
|
.option('--json', 'Output as JSON')
|
|
146
|
+
.addHelpText('after', `
|
|
147
|
+
Examples:
|
|
148
|
+
$ lobster apikeys list # List all API keys
|
|
149
|
+
$ lobster apikeys ls # Same (alias)
|
|
150
|
+
$ lobster apikeys list --json # Output as JSON`)
|
|
146
151
|
.action(apiKeysListHandler);
|
|
147
152
|
apikeys
|
|
148
153
|
.command('create <name>')
|
|
@@ -150,12 +155,21 @@ function createApiKeyCommands(program) {
|
|
|
150
155
|
.option('-s, --scope <scope>', 'Key scope (repeatable)', (val, prev) => [...(prev || []), val], [])
|
|
151
156
|
.option('--expires <date>', 'Expiration date (ISO format)')
|
|
152
157
|
.option('--json', 'Output as JSON')
|
|
158
|
+
.addHelpText('after', `
|
|
159
|
+
Examples:
|
|
160
|
+
$ lobster apikeys create my-key # Create a key with default scopes
|
|
161
|
+
$ lobster apikeys create ci-key -s cages:read -s cages:write # Scoped key
|
|
162
|
+
$ lobster apikeys create tmp --expires 2025-12-31 # Key with expiration`)
|
|
153
163
|
.action(apiKeysCreateHandler);
|
|
154
164
|
apikeys
|
|
155
165
|
.command('revoke <keyId>')
|
|
156
166
|
.description('Revoke an API key')
|
|
157
167
|
.option('-f, --force', 'Skip confirmation')
|
|
158
168
|
.option('--json', 'Output as JSON')
|
|
169
|
+
.addHelpText('after', `
|
|
170
|
+
Examples:
|
|
171
|
+
$ lobster apikeys revoke ak_abc123 # Revoke with confirmation prompt
|
|
172
|
+
$ lobster apikeys revoke ak_abc123 --force # Revoke without confirmation`)
|
|
159
173
|
.action(apiKeysRevokeHandler);
|
|
160
174
|
}
|
|
161
175
|
//# sourceMappingURL=apikeys.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apikeys.js","sourceRoot":"","sources":["../../src/commands/apikeys.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaH,gDAkBC;AAKD,oDAuBC;AAKD,oDAmCC;AAKD,
|
|
1
|
+
{"version":3,"file":"apikeys.js","sourceRoot":"","sources":["../../src/commands/apikeys.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/auth.d.ts
CHANGED
|
@@ -5,10 +5,11 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { Command } from 'commander';
|
|
7
7
|
/**
|
|
8
|
-
* Login command handler — authenticates via browser OAuth flow
|
|
8
|
+
* Login command handler — authenticates via browser OAuth flow or direct token
|
|
9
9
|
*/
|
|
10
10
|
export declare function loginHandler(options: {
|
|
11
11
|
json?: boolean;
|
|
12
|
+
token?: string;
|
|
12
13
|
}): Promise<void>;
|
|
13
14
|
/**
|
|
14
15
|
* Logout command handler — clears local authentication state
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuJpC;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAK7F;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAiB9E;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAiC9E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmBzD"}
|
package/dist/commands/auth.js
CHANGED
|
@@ -145,15 +145,45 @@ async function browserLoginHandler(options) {
|
|
|
145
145
|
output.success('Authenticated via browser!');
|
|
146
146
|
console.log(`\n Tip: run ${chalk_1.default.cyan('lobster ssh-config')} to enable ${chalk_1.default.cyan('ssh agent@my-cage.lobster')}`);
|
|
147
147
|
}
|
|
148
|
+
process.exit(0);
|
|
148
149
|
}
|
|
149
150
|
catch (err) {
|
|
150
151
|
(0, error_handler_1.handleError)(err, { spinner, json: options.json, context: 'browser authentication' });
|
|
151
152
|
}
|
|
152
153
|
}
|
|
153
154
|
/**
|
|
154
|
-
*
|
|
155
|
+
* Validates that a token looks like a LobsterCage API key.
|
|
156
|
+
*/
|
|
157
|
+
function isValidApiKey(token) {
|
|
158
|
+
return token.startsWith('lc_live_') || token.startsWith('lc_test_');
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Token login — stores an API key directly without browser flow
|
|
162
|
+
*/
|
|
163
|
+
async function tokenLoginHandler(options) {
|
|
164
|
+
const sanitized = config.sanitizeToken(options.token);
|
|
165
|
+
if (!isValidApiKey(sanitized)) {
|
|
166
|
+
output.error('Invalid API key format. Expected a key starting with lc_live_ or lc_test_.');
|
|
167
|
+
process.exit(1);
|
|
168
|
+
}
|
|
169
|
+
config.updateConfig({
|
|
170
|
+
accessToken: sanitized,
|
|
171
|
+
});
|
|
172
|
+
if (options.json) {
|
|
173
|
+
output.json({ success: true, method: 'token' });
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
output.success('Authenticated via API key!');
|
|
177
|
+
console.log(`\n Tip: run ${chalk_1.default.cyan('lobster ssh-config')} to enable ${chalk_1.default.cyan('ssh agent@my-cage.lobster')}`);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Login command handler — authenticates via browser OAuth flow or direct token
|
|
155
182
|
*/
|
|
156
183
|
async function loginHandler(options) {
|
|
184
|
+
if (options.token) {
|
|
185
|
+
return tokenLoginHandler({ ...options, token: options.token });
|
|
186
|
+
}
|
|
157
187
|
return browserLoginHandler(options);
|
|
158
188
|
}
|
|
159
189
|
/**
|
|
@@ -221,8 +251,9 @@ async function whoamiHandler(options) {
|
|
|
221
251
|
function createAuthCommands(program) {
|
|
222
252
|
program
|
|
223
253
|
.command('login')
|
|
224
|
-
.description('Login to LobsterCage via browser')
|
|
254
|
+
.description('Login to LobsterCage via browser or API key')
|
|
225
255
|
.option('--json', 'Output as JSON')
|
|
256
|
+
.option('--token <key>', 'Authenticate with an API key (lc_live_* or lc_test_*) instead of browser flow')
|
|
226
257
|
.action(loginHandler);
|
|
227
258
|
program
|
|
228
259
|
.command('logout')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"billing.d.ts","sourceRoot":"","sources":["../../src/commands/billing.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"billing.d.ts","sourceRoot":"","sources":["../../src/commands/billing.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmJpC;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiC5D"}
|
package/dist/commands/billing.js
CHANGED
|
@@ -85,7 +85,7 @@ async function billingHandler(options) {
|
|
|
85
85
|
}
|
|
86
86
|
if (billing.plan === 'free') {
|
|
87
87
|
console.log();
|
|
88
|
-
output.info(`Upgrade
|
|
88
|
+
output.info(`Upgrade for more compute: ${chalk_1.default.bold('lobster upgrade')} (or ${chalk_1.default.bold('lobster upgrade --plan builder')})`);
|
|
89
89
|
}
|
|
90
90
|
}
|
|
91
91
|
catch (err) {
|
|
@@ -93,11 +93,18 @@ async function billingHandler(options) {
|
|
|
93
93
|
}
|
|
94
94
|
}
|
|
95
95
|
/**
|
|
96
|
-
* Upgrade to
|
|
96
|
+
* Upgrade to a paid plan
|
|
97
97
|
*/
|
|
98
|
-
async function upgradeHandler() {
|
|
98
|
+
async function upgradeHandler(options) {
|
|
99
99
|
const spinner = (0, ora_1.default)('Creating checkout session...').start();
|
|
100
100
|
try {
|
|
101
|
+
const rawPlan = options.plan || 'starter';
|
|
102
|
+
if (rawPlan !== 'starter' && rawPlan !== 'builder') {
|
|
103
|
+
spinner.stop();
|
|
104
|
+
output.error(`Invalid plan: ${rawPlan}. Must be 'starter' or 'builder'.`);
|
|
105
|
+
process.exit(1);
|
|
106
|
+
}
|
|
107
|
+
const plan = rawPlan;
|
|
101
108
|
(0, utils_1.requireAuth)();
|
|
102
109
|
const billing = await api.getBillingStatus();
|
|
103
110
|
if (billing.plan !== 'free') {
|
|
@@ -107,7 +114,7 @@ async function upgradeHandler() {
|
|
|
107
114
|
return;
|
|
108
115
|
}
|
|
109
116
|
const dashboardUrl = process.env.LOBSTERCAGE_DASHBOARD_URL || 'https://app.lobstercage.ai';
|
|
110
|
-
const { url } = await api.createCheckoutSession(`${dashboardUrl}/settings?billing=success`, `${dashboardUrl}/settings
|
|
117
|
+
const { url } = await api.createCheckoutSession(`${dashboardUrl}/settings?billing=success`, `${dashboardUrl}/settings`, plan);
|
|
111
118
|
spinner.stop();
|
|
112
119
|
output.success('Checkout session created!');
|
|
113
120
|
console.log();
|
|
@@ -168,14 +175,27 @@ function createBillingCommands(program) {
|
|
|
168
175
|
.command('status', { isDefault: true })
|
|
169
176
|
.description('Show current plan and credit usage')
|
|
170
177
|
.option('--json', 'Output as JSON')
|
|
178
|
+
.addHelpText('after', `
|
|
179
|
+
Examples:
|
|
180
|
+
$ lobster billing # Show plan and credit usage (default)
|
|
181
|
+
$ lobster billing status # Same as above
|
|
182
|
+
$ lobster billing status --json # Output billing info as JSON`)
|
|
171
183
|
.action(billingHandler);
|
|
172
184
|
billing
|
|
173
185
|
.command('portal')
|
|
174
186
|
.description('Open Stripe billing portal to manage subscription')
|
|
187
|
+
.addHelpText('after', `
|
|
188
|
+
Examples:
|
|
189
|
+
$ lobster billing portal # Open Stripe portal in browser`)
|
|
175
190
|
.action(portalHandler);
|
|
176
191
|
program
|
|
177
192
|
.command('upgrade')
|
|
178
|
-
.description('Upgrade to
|
|
193
|
+
.description('Upgrade to a paid plan')
|
|
194
|
+
.option('-p, --plan <plan>', 'Plan to upgrade to (starter, builder)', 'starter')
|
|
195
|
+
.addHelpText('after', `
|
|
196
|
+
Examples:
|
|
197
|
+
$ lobster upgrade # Upgrade to Starter plan (default)
|
|
198
|
+
$ lobster upgrade --plan builder # Upgrade to Builder plan`)
|
|
179
199
|
.action(upgradeHandler);
|
|
180
200
|
}
|
|
181
201
|
//# sourceMappingURL=billing.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"billing.js","sourceRoot":"","sources":["../../src/commands/billing.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"billing.js","sourceRoot":"","sources":["../../src/commands/billing.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/cages.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cages.d.ts","sourceRoot":"","sources":["../../src/commands/cages.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyCpC,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IACP,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,
|
|
1
|
+
{"version":3,"file":"cages.d.ts","sourceRoot":"","sources":["../../src/commands/cages.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyCpC,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IACP,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GACA,OAAO,CAAC,IAAI,CAAC,CA0Gf;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAoB9G;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA+BpI;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBhH;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBhI;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBnG;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAiB9F;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAoCnI;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAC5F,OAAO,CAAC,IAAI,CAAC,CAYf;AA6JD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8EzD"}
|
package/dist/commands/cages.js
CHANGED
|
@@ -102,19 +102,32 @@ async function deployHandler(name, options) {
|
|
|
102
102
|
image: options.image || 'ubuntu:22.04',
|
|
103
103
|
autoStart: !options.noStart,
|
|
104
104
|
};
|
|
105
|
-
// --size takes priority over --cpu/--memory
|
|
105
|
+
// --size takes priority over --cpu/--memory
|
|
106
106
|
if (options.size) {
|
|
107
107
|
if (!VALID_SIZES.includes(options.size)) {
|
|
108
|
-
|
|
108
|
+
// Resource specs from @lobstercage/lifecycle SIZE_SPECS (lifecycle/src/billing.ts)
|
|
109
|
+
const sizeDetails = {
|
|
110
|
+
starter: { cpu: 1024, memory: 4096 },
|
|
111
|
+
standard: { cpu: 2048, memory: 8192 },
|
|
112
|
+
power: { cpu: 4096, memory: 16384 },
|
|
113
|
+
extreme: { cpu: 8192, memory: 32768 },
|
|
114
|
+
};
|
|
115
|
+
const lines = VALID_SIZES.map(s => {
|
|
116
|
+
const r = sizeDetails[s];
|
|
117
|
+
const cpu = r.cpu / 1024;
|
|
118
|
+
const mem = r.memory >= 1024 ? `${r.memory / 1024} GB` : `${r.memory} MB`;
|
|
119
|
+
return ` ${s.padEnd(10)} — ${cpu} vCPU / ${mem}`;
|
|
120
|
+
});
|
|
121
|
+
output.error(`Invalid size "${options.size}". Available sizes:\n${lines.join('\n')}`);
|
|
109
122
|
process.exit(1);
|
|
110
123
|
}
|
|
111
124
|
request.size = options.size;
|
|
112
125
|
// Warn if legacy resource flags are also provided
|
|
113
|
-
if (options.cpu || options.memory
|
|
114
|
-
output.warning('--size overrides --cpu
|
|
126
|
+
if (options.cpu || options.memory) {
|
|
127
|
+
output.warning('--size overrides --cpu and --memory options');
|
|
115
128
|
}
|
|
116
129
|
}
|
|
117
|
-
else if (options.cpu || options.memory
|
|
130
|
+
else if (options.cpu || options.memory) {
|
|
118
131
|
// Legacy resource flags (backward compat)
|
|
119
132
|
request.resources = {};
|
|
120
133
|
if (options.cpu) {
|
|
@@ -133,14 +146,6 @@ async function deployHandler(name, options) {
|
|
|
133
146
|
}
|
|
134
147
|
request.resources.memory = memory;
|
|
135
148
|
}
|
|
136
|
-
if (options.storage) {
|
|
137
|
-
const storage = parseInt(options.storage, 10);
|
|
138
|
-
if (isNaN(storage) || storage < 20 || storage > 200) {
|
|
139
|
-
output.error('Invalid storage value. Must be between 20 and 200 GB');
|
|
140
|
-
process.exit(1);
|
|
141
|
-
}
|
|
142
|
-
request.resources.storage = storage;
|
|
143
|
-
}
|
|
144
149
|
}
|
|
145
150
|
// Parse network options
|
|
146
151
|
if (options.egress || options.allowHost) {
|
|
@@ -538,13 +543,13 @@ async function logsHandlerLocal(name, options) {
|
|
|
538
543
|
*/
|
|
539
544
|
function createCageCommands(program) {
|
|
540
545
|
program
|
|
541
|
-
.command('
|
|
546
|
+
.command('create <name>')
|
|
547
|
+
.alias('deploy')
|
|
542
548
|
.description('Create and start a new cage')
|
|
543
549
|
.option('-i, --image <image>', 'Container image (default: ubuntu:22.04)')
|
|
544
550
|
.option('-s, --size <size>', 'Cage size tier (starter, standard, power, extreme)')
|
|
545
551
|
.option('--cpu <vcpu>', 'CPU allocation in vCPU (deprecated, use --size)')
|
|
546
552
|
.option('--memory <mb>', 'Memory in MB (deprecated, use --size)')
|
|
547
|
-
.option('--storage <gb>', 'Storage in GB (deprecated, use --size)')
|
|
548
553
|
.option('--egress <policy>', 'Egress policy (allow-all, allowlist, deny-all)')
|
|
549
554
|
.option('--allow-host <host>', 'Allowed egress host (repeatable)', (val, prev) => [...(prev || []), val], [])
|
|
550
555
|
.option('--no-start', 'Do not start the cage after creation')
|