oblien 2.0.6 → 2.0.8

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 (42) hide show
  1. package/dist/cli/commands/auth.d.ts.map +1 -1
  2. package/dist/cli/commands/auth.js +31 -8
  3. package/dist/cli/commands/auth.js.map +1 -1
  4. package/dist/cli/commands/lifecycle.d.ts.map +1 -1
  5. package/dist/cli/commands/lifecycle.js +7 -5
  6. package/dist/cli/commands/lifecycle.js.map +1 -1
  7. package/dist/cli/commands/scp.d.ts +3 -0
  8. package/dist/cli/commands/scp.d.ts.map +1 -0
  9. package/dist/cli/commands/scp.js +126 -0
  10. package/dist/cli/commands/scp.js.map +1 -0
  11. package/dist/cli/commands/ssh-util.d.ts +6 -0
  12. package/dist/cli/commands/ssh-util.d.ts.map +1 -0
  13. package/dist/cli/commands/ssh-util.js +24 -0
  14. package/dist/cli/commands/ssh-util.js.map +1 -0
  15. package/dist/cli/commands/ssh.d.ts.map +1 -1
  16. package/dist/cli/commands/ssh.js +62 -13
  17. package/dist/cli/commands/ssh.js.map +1 -1
  18. package/dist/cli/commands/types.d.ts +1 -0
  19. package/dist/cli/commands/types.d.ts.map +1 -1
  20. package/dist/cli/commands/workspaces.d.ts.map +1 -1
  21. package/dist/cli/commands/workspaces.js +15 -14
  22. package/dist/cli/commands/workspaces.js.map +1 -1
  23. package/dist/cli/index.js +8 -1
  24. package/dist/cli/index.js.map +1 -1
  25. package/dist/cli/output.d.ts +1 -0
  26. package/dist/cli/output.d.ts.map +1 -1
  27. package/dist/cli/output.js +5 -0
  28. package/dist/cli/output.js.map +1 -1
  29. package/dist/mcp/tools.js +1 -1
  30. package/dist/mcp/tools.js.map +1 -1
  31. package/dist/types/index.d.ts +1 -1
  32. package/dist/types/index.d.ts.map +1 -1
  33. package/dist/types/resources.d.ts +5 -3
  34. package/dist/types/resources.d.ts.map +1 -1
  35. package/dist/types/workspace-resources.d.ts +18 -5
  36. package/dist/types/workspace-resources.d.ts.map +1 -1
  37. package/dist/types/workspace.d.ts +56 -9
  38. package/dist/types/workspace.d.ts.map +1 -1
  39. package/dist/workspace.d.ts.map +1 -1
  40. package/dist/workspace.js +12 -1
  41. package/dist/workspace.js.map +1 -1
  42. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AA4K3C,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA2B5E"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAoM3C,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA2B5E"}
@@ -129,21 +129,44 @@ function authLogout() {
129
129
  printSuccess('Logged out. Credentials removed.');
130
130
  }
131
131
  // ── Status ──────────────────────────────────────────────────────────
132
- function authStatus() {
132
+ async function authStatus(flags) {
133
133
  const config = loadConfig();
134
134
  if (!config?.token && !config?.clientId) {
135
135
  console.log('Not logged in.\n\nRun: oblien login');
136
136
  return;
137
137
  }
138
- console.log(` Logged in`);
138
+ const base = config.baseUrl ?? flags.baseUrl ?? DEFAULT_BASE;
139
+ // Verify credentials are still valid
140
+ const headers = { 'Content-Type': 'application/json' };
139
141
  if (config.token) {
140
- console.log(` Auth: Token`);
142
+ headers['Authorization'] = `Bearer ${config.token}`;
143
+ }
144
+ else if (config.clientId && config.clientSecret) {
145
+ headers['X-Client-ID'] = config.clientId;
146
+ headers['X-Client-Secret'] = config.clientSecret;
147
+ }
148
+ try {
149
+ const res = await fetch(`${base}/settings/profile`, { headers });
150
+ const data = await res.json();
151
+ if (data.error || !data.success) {
152
+ printError('Session expired. Run: oblien login');
153
+ return;
154
+ }
155
+ const user = data.user;
156
+ console.log(` Logged in as ${user?.name ?? user?.email ?? 'unknown'}`);
157
+ if (user?.email)
158
+ console.log(` Email: ${user.email}`);
159
+ console.log(` Auth: ${config.token ? 'Token' : 'API Key'}`);
160
+ if (config.clientId)
161
+ console.log(` Client ID: ${config.clientId.slice(0, 16)}…`);
162
+ console.log(` Config: ${configPath()}`);
141
163
  }
142
- else {
143
- console.log(` Auth: API Key`);
144
- console.log(` Client ID: ${config.clientId.slice(0, 16)}…`);
164
+ catch {
165
+ // Network error — show cached info
166
+ console.log(` Logged in (offline — could not verify)`);
167
+ console.log(` Auth: ${config.token ? 'Token' : 'API Key'}`);
168
+ console.log(` Config: ${configPath()}`);
145
169
  }
146
- console.log(` Config: ${configPath()}`);
147
170
  }
148
171
  // ── Router ──────────────────────────────────────────────────────────
149
172
  export async function authCmd(args, flags) {
@@ -154,7 +177,7 @@ export async function authCmd(args, flags) {
154
177
  case 'logout':
155
178
  return authLogout();
156
179
  case 'status':
157
- return authStatus();
180
+ return authStatus(flags);
158
181
  default:
159
182
  console.log(`
160
183
  oblien auth - Authenticate with Oblien
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/cli/commands/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/cli/commands/auth.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/lifecycle.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA8BjF"}
1
+ {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/lifecycle.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAgCjF"}
@@ -21,12 +21,14 @@ export async function lifecycleCmd(args, flags) {
21
21
  oblien lifecycle destroy <ws-id> Destroy workspace
22
22
 
23
23
  Temporary mode flags:
24
- --ttl <seconds> Time-to-live in seconds
25
- --ttl-action <action> stop or remove (default: stop)
24
+ --ttl <duration> Time-to-live (seconds or e.g. "1h", "30m")
25
+ --ttl-action <action> Action on TTL expiry: stop, pause, suspend, or remove (default: stop)
26
26
 
27
27
  Examples:
28
28
  oblien lifecycle get ws_abc123
29
29
  oblien lifecycle make-temporary ws_abc123 --ttl 3600
30
+ oblien lifecycle make-temporary ws_abc123 --ttl 1h --ttl-action pause
31
+ oblien lifecycle update-ttl ws_abc123 --ttl 2h --ttl-action suspend
30
32
  oblien lifecycle make-permanent ws_abc123
31
33
  `);
32
34
  }
@@ -50,11 +52,11 @@ async function lcMakeTemporary(id, args, flags) {
50
52
  const ttl = parseFlag(args, '--ttl');
51
53
  const action = parseFlag(args, '--ttl-action');
52
54
  if (ttl)
53
- params.ttl = Number(ttl);
55
+ params.ttl = ttl;
54
56
  if (action)
55
57
  params.ttl_action = action;
56
58
  await client.workspaces.lifecycle.makeTemporary(wsId, params);
57
- printSuccess(`Set ${wsId} to temporary mode${ttl ? ` (TTL: ${ttl}s)` : ''}`);
59
+ printSuccess(`Set ${wsId} to temporary mode${ttl ? ` (TTL: ${ttl})` : ''}`);
58
60
  }
59
61
  async function lcUpdateTtl(id, args, flags) {
60
62
  const wsId = requireId(id, 'update-ttl');
@@ -63,7 +65,7 @@ async function lcUpdateTtl(id, args, flags) {
63
65
  const ttl = parseFlag(args, '--ttl');
64
66
  const action = parseFlag(args, '--ttl-action');
65
67
  if (ttl)
66
- params.ttl = Number(ttl);
68
+ params.ttl = ttl;
67
69
  if (action)
68
70
  params.ttl_action = action;
69
71
  await client.workspaces.lifecycle.updateTtl(wsId, params);
@@ -1 +1 @@
1
- {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../../src/cli/commands/lifecycle.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../../src/cli/commands/lifecycle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { CliFlags } from './types.js';
2
+ export declare function scpCmd(args: string[], flags: CliFlags): Promise<void>;
3
+ //# sourceMappingURL=scp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scp.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/scp.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAM3C,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAqC3E"}
@@ -0,0 +1,126 @@
1
+ import { buildClient } from '../auth.js';
2
+ import { requireId } from './helpers.js';
3
+ import { spawn } from 'child_process';
4
+ export async function scpCmd(args, flags) {
5
+ const sub = args[0];
6
+ switch (sub) {
7
+ case 'push':
8
+ case 'upload': return scpPush(args[1], args.slice(2), flags);
9
+ case 'pull':
10
+ case 'download': return scpPull(args[1], args.slice(2), flags);
11
+ default:
12
+ console.log(`
13
+ oblien scp - Transfer files via SCP (SSH-based)
14
+
15
+ Works over the SSH bastion — no runtime API needed.
16
+ SSH must be enabled on the workspace. Use "oblien ssh enable <ws>" first,
17
+ or these commands will auto-enable it for you.
18
+
19
+ Usage:
20
+ oblien scp push <ws> <local-paths...> [--dest <remote-dir>]
21
+ oblien scp pull <ws> <remote-paths...> [--dest <local-dir>]
22
+
23
+ Aliases:
24
+ push = upload
25
+ pull = download
26
+
27
+ Examples:
28
+ oblien scp push my-app ./src ./package.json --dest /app
29
+ oblien scp push my-app ./deploy.sh
30
+ oblien scp pull my-app /app/dist --dest ./build
31
+ oblien scp pull my-app /var/log/app.log
32
+
33
+ Notes:
34
+ - Uses SCP over the SSH bastion (ProxyJump).
35
+ - For bulk transfers, "oblien files push/pull" uses the runtime API
36
+ and may be faster for large directory trees.
37
+ - Set your SSH key with "oblien ssh set-key" for passwordless transfers.
38
+ `);
39
+ }
40
+ }
41
+ /** Ensure SSH is enabled and return connection info. */
42
+ async function ensureSshConnection(wsId, flags) {
43
+ const client = buildClient(flags);
44
+ let status = await client.workspaces.ssh.status(wsId);
45
+ if (!status.ssh_enabled) {
46
+ console.error('SSH is not enabled. Enabling...');
47
+ const res = await client.workspaces.ssh.enable(wsId);
48
+ const password = res.ssh_password;
49
+ if (password) {
50
+ console.error(`SSH password: ${password}`);
51
+ }
52
+ status = await client.workspaces.ssh.status(wsId);
53
+ }
54
+ if (!status.connection) {
55
+ console.error('SSH is enabled but no connection info available.');
56
+ process.exit(1);
57
+ }
58
+ return status.connection;
59
+ }
60
+ // ── Push: local → workspace ──────────────────────────────────────────
61
+ async function scpPush(wsId, args, flags) {
62
+ const id = requireId(wsId, 'scp push <workspace> <local-paths...>');
63
+ let dest = '/root/';
64
+ const localPaths = [];
65
+ for (let i = 0; i < args.length; i++) {
66
+ if (args[i] === '--dest' && i + 1 < args.length) {
67
+ dest = args[++i];
68
+ }
69
+ else if (!args[i].startsWith('-')) {
70
+ localPaths.push(args[i]);
71
+ }
72
+ }
73
+ if (localPaths.length === 0) {
74
+ console.error('Usage: oblien scp push <ws> <local-paths...> [--dest <remote-dir>]');
75
+ process.exit(1);
76
+ }
77
+ const conn = await ensureSshConnection(id, flags);
78
+ // Build: scp -o 'ProxyJump root@bastion' -r <paths...> root@host:<dest>
79
+ const scpArgs = [
80
+ '-o', `ProxyJump ${conn.user}@${conn.bastion}`,
81
+ '-r',
82
+ ...localPaths,
83
+ `${conn.user}@${conn.host}:${dest}`,
84
+ ];
85
+ console.error(`Uploading ${localPaths.length} path(s) to ${dest}...`);
86
+ runScp(scpArgs);
87
+ }
88
+ // ── Pull: workspace → local ─────────────────────────────────────────
89
+ async function scpPull(wsId, args, flags) {
90
+ const id = requireId(wsId, 'scp pull <workspace> <remote-paths...>');
91
+ let localDest = '.';
92
+ const remotePaths = [];
93
+ for (let i = 0; i < args.length; i++) {
94
+ if (args[i] === '--dest' && i + 1 < args.length) {
95
+ localDest = args[++i];
96
+ }
97
+ else if (!args[i].startsWith('-')) {
98
+ remotePaths.push(args[i]);
99
+ }
100
+ }
101
+ if (remotePaths.length === 0) {
102
+ console.error('Usage: oblien scp pull <ws> <remote-paths...> [--dest <local-dir>]');
103
+ process.exit(1);
104
+ }
105
+ const conn = await ensureSshConnection(id, flags);
106
+ // Build: scp -o 'ProxyJump root@bastion' -r root@host:<path1> root@host:<path2> <local>
107
+ const remoteArgs = remotePaths.map(p => `${conn.user}@${conn.host}:${p}`);
108
+ const scpArgs = [
109
+ '-o', `ProxyJump ${conn.user}@${conn.bastion}`,
110
+ '-r',
111
+ ...remoteArgs,
112
+ localDest,
113
+ ];
114
+ console.error(`Downloading ${remotePaths.length} path(s) to ${localDest}...`);
115
+ runScp(scpArgs);
116
+ }
117
+ // ── Helpers ──────────────────────────────────────────────────────────
118
+ function runScp(scpArgs) {
119
+ const child = spawn('scp', scpArgs, { stdio: 'inherit' });
120
+ child.on('close', (code) => process.exit(code ?? 0));
121
+ child.on('error', (err) => {
122
+ console.error(`Failed to start scp: ${err.message}`);
123
+ process.exit(1);
124
+ });
125
+ }
126
+ //# sourceMappingURL=scp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scp.js","sourceRoot":"","sources":["../../../src/cli/commands/scp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAItC,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAc,EAAE,KAAe;IAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAEpB,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,MAAM,CAAC;QACZ,KAAK,QAAQ,CAAC,CAAE,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC9D,KAAK,MAAM,CAAC;QACZ,KAAK,UAAU,CAAC,CAAC,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC/D;YACE,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;CA0BjB,CAAC,CAAC;IACD,CAAC;AACH,CAAC;AAED,wDAAwD;AACxD,KAAK,UAAU,mBAAmB,CAAC,IAAY,EAAE,KAAe;IAC9D,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAEtD,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QACxB,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACjD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACrD,MAAM,QAAQ,GAAI,GAA+B,CAAC,YAAY,CAAC;QAC/D,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,iBAAiB,QAAQ,EAAE,CAAC,CAAC;QAC7C,CAAC;QACD,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACpD,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACvB,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;QAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,MAAM,CAAC,UAAU,CAAC;AAC3B,CAAC;AAED,wEAAwE;AAExE,KAAK,UAAU,OAAO,CAAC,IAAwB,EAAE,IAAc,EAAE,KAAe;IAC9E,MAAM,EAAE,GAAG,SAAS,CAAC,IAAI,EAAE,uCAAuC,CAAC,CAAC;IAEpE,IAAI,IAAI,GAAG,QAAQ,CAAC;IACpB,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAChD,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACnB,CAAC;aAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACpC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,oEAAoE,CAAC,CAAC;QACpF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAElD,wEAAwE;IACxE,MAAM,OAAO,GAAG;QACd,IAAI,EAAE,aAAa,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE;QAC9C,IAAI;QACJ,GAAG,UAAU;QACb,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE;KACpC,CAAC;IAEF,OAAO,CAAC,KAAK,CAAC,aAAa,UAAU,CAAC,MAAM,eAAe,IAAI,KAAK,CAAC,CAAC;IACtE,MAAM,CAAC,OAAO,CAAC,CAAC;AAClB,CAAC;AAED,uEAAuE;AAEvE,KAAK,UAAU,OAAO,CAAC,IAAwB,EAAE,IAAc,EAAE,KAAe;IAC9E,MAAM,EAAE,GAAG,SAAS,CAAC,IAAI,EAAE,wCAAwC,CAAC,CAAC;IAErE,IAAI,SAAS,GAAG,GAAG,CAAC;IACpB,MAAM,WAAW,GAAa,EAAE,CAAC;IAEjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAChD,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACxB,CAAC;aAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACpC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,KAAK,CAAC,oEAAoE,CAAC,CAAC;QACpF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAElD,wFAAwF;IACxF,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1E,MAAM,OAAO,GAAG;QACd,IAAI,EAAE,aAAa,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE;QAC9C,IAAI;QACJ,GAAG,UAAU;QACb,SAAS;KACV,CAAC;IAEF,OAAO,CAAC,KAAK,CAAC,eAAe,WAAW,CAAC,MAAM,eAAe,SAAS,KAAK,CAAC,CAAC;IAC9E,MAAM,CAAC,OAAO,CAAC,CAAC;AAClB,CAAC;AAED,wEAAwE;AAExE,SAAS,MAAM,CAAC,OAAiB;IAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAC1D,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;IACrD,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;QACxB,OAAO,CAAC,KAAK,CAAC,wBAAwB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Remove all known_hosts entries that reference the given host.
3
+ * Matches plain `host`, bracketed `[host]:port`, and comma-separated lists containing the host.
4
+ */
5
+ export declare function removeKnownHost(host: string): void;
6
+ //# sourceMappingURL=ssh-util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ssh-util.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/ssh-util.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAgBlD"}
@@ -0,0 +1,24 @@
1
+ import { existsSync, readFileSync, writeFileSync } from 'node:fs';
2
+ import { homedir } from 'node:os';
3
+ import { join } from 'node:path';
4
+ /**
5
+ * Remove all known_hosts entries that reference the given host.
6
+ * Matches plain `host`, bracketed `[host]:port`, and comma-separated lists containing the host.
7
+ */
8
+ export function removeKnownHost(host) {
9
+ const knownHostsPath = join(homedir(), '.ssh', 'known_hosts');
10
+ if (!existsSync(knownHostsPath))
11
+ return;
12
+ const lines = readFileSync(knownHostsPath, 'utf-8').split('\n');
13
+ const filtered = lines.filter((line) => {
14
+ const hostField = line.split(/\s/)[0] ?? '';
15
+ // Check each comma-separated host pattern in the first field
16
+ const hosts = hostField.split(',');
17
+ return !hosts.some((h) => h === host || h === `[${host}]` || h.startsWith(`[${host}]:`));
18
+ });
19
+ if (filtered.length !== lines.length) {
20
+ writeFileSync(knownHostsPath, filtered.join('\n'), { mode: 0o600 });
21
+ console.log(`Removed stale SSH fingerprint for ${host} from known_hosts`);
22
+ }
23
+ }
24
+ //# sourceMappingURL=ssh-util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ssh-util.js","sourceRoot":"","sources":["../../../src/cli/commands/ssh-util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;IAC9D,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC;QAAE,OAAO;IAExC,MAAM,KAAK,GAAG,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QACrC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5C,6DAA6D;QAC7D,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC;IAC3F,CAAC,CAAC,CAAC;IAEH,IAAI,QAAQ,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;QACrC,aAAa,CAAC,cAAc,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,qCAAqC,IAAI,mBAAmB,CAAC,CAAC;IAC5E,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ssh.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/ssh.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG3C,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAgC3E"}
1
+ {"version":3,"file":"ssh.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/ssh.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAmB3C,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAqC3E"}
@@ -2,6 +2,18 @@ import { buildClient } from '../auth.js';
2
2
  import { printResult, printSuccess } from '../output.js';
3
3
  import { parseFlag, requireId } from './helpers.js';
4
4
  import { spawn } from 'child_process';
5
+ import { removeKnownHost } from './ssh-util.js';
6
+ import { createInterface } from 'node:readline';
7
+ /** Prompt the user for a line of input (promise-based). */
8
+ function prompt(message) {
9
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
10
+ return new Promise((resolve) => {
11
+ rl.question(message, (answer) => {
12
+ rl.close();
13
+ resolve(answer);
14
+ });
15
+ });
16
+ }
5
17
  export async function sshCmd(args, flags) {
6
18
  const sub = args[0];
7
19
  switch (sub) {
@@ -16,7 +28,7 @@ export async function sshCmd(args, flags) {
16
28
  oblien ssh - Manage SSH access
17
29
 
18
30
  Usage:
19
- oblien ssh connect <ws> Connect via SSH
31
+ oblien ssh connect <ws> [--passwordless] Connect via SSH
20
32
  oblien ssh status <ws> Check SSH status
21
33
  oblien ssh enable <ws> Enable SSH
22
34
  oblien ssh disable <ws> Disable SSH
@@ -25,8 +37,13 @@ export async function sshCmd(args, flags) {
25
37
 
26
38
  <ws> can be a workspace ID or slug.
27
39
 
40
+ Flags:
41
+ --passwordless Auto-enable SSH and set a public key if needed, then
42
+ connect without a password prompt.
43
+
28
44
  Examples:
29
45
  oblien ssh connect my-dev-env
46
+ oblien ssh connect my-dev-env --passwordless
30
47
  oblien ssh status ws_abc123
31
48
  oblien ssh enable my-api
32
49
  oblien ssh set-password ws_abc123 --password mysecret
@@ -37,32 +54,64 @@ export async function sshCmd(args, flags) {
37
54
  async function sshConnect(id, flags) {
38
55
  const wsId = requireId(id, 'ssh connect <workspace>');
39
56
  const client = buildClient(flags);
40
- const status = await client.workspaces.ssh.status(wsId);
57
+ let status = await client.workspaces.ssh.status(wsId);
58
+ // ── Passwordless flow ──────────────────────────────────────────────
59
+ if (flags.passwordless) {
60
+ // Ensure SSH is enabled
61
+ if (!status.ssh_enabled) {
62
+ await client.workspaces.ssh.enable(wsId);
63
+ status = await client.workspaces.ssh.status(wsId);
64
+ }
65
+ // Ensure a public key is authorized
66
+ if (!status.ssh_key_set) {
67
+ console.log('No SSH key set for this workspace.');
68
+ const pubkey = await prompt('Paste your SSH public key: ');
69
+ if (!pubkey.trim()) {
70
+ console.error('No key provided. Aborting.');
71
+ process.exit(1);
72
+ }
73
+ await client.workspaces.ssh.setKey(wsId, { public_key: pubkey.trim() });
74
+ console.log('SSH key set. Connecting...');
75
+ status = await client.workspaces.ssh.status(wsId);
76
+ }
77
+ const conn = status.connection;
78
+ if (!conn) {
79
+ console.error('SSH is enabled but no connection info available.');
80
+ process.exit(1);
81
+ }
82
+ startSsh(conn);
83
+ return;
84
+ }
85
+ // ── Normal flow ────────────────────────────────────────────────────
86
+ // Clean stale known_hosts entry when the VM was rebuilt
87
+ if (status.connection?.host) {
88
+ removeKnownHost(status.connection.host);
89
+ }
41
90
  if (!status.ssh_enabled) {
42
91
  console.log('SSH is not enabled on this workspace. Enabling...');
43
92
  const enableRes = await client.workspaces.ssh.enable(wsId);
44
93
  const password = enableRes.ssh_password;
45
94
  if (password) {
46
95
  console.log(`SSH password: ${password}`);
96
+ console.log('Tip: Use "oblien ssh connect <ws> --passwordless" or set your public key for key-based access.');
47
97
  }
48
- // Re-fetch status to get connection info
49
- const updated = await client.workspaces.ssh.status(wsId);
50
- if (!updated.connection) {
51
- console.error('Failed to get SSH connection info after enabling.');
52
- process.exit(1);
53
- }
54
- startSsh(updated.connection);
55
- return;
98
+ status = await client.workspaces.ssh.status(wsId);
56
99
  }
57
- if (!status.connection) {
100
+ const conn = status.connection;
101
+ if (!conn) {
58
102
  console.error('SSH is enabled but no connection info available.');
59
103
  process.exit(1);
60
104
  }
61
- startSsh(status.connection);
105
+ startSsh(conn);
62
106
  }
63
107
  function startSsh(connection) {
64
- const parts = connection.command.split(/\s+/);
108
+ const parts = connection.command.split(/\s+/).filter(Boolean);
65
109
  const bin = parts[0];
110
+ // Only allow the ssh binary — never execute arbitrary commands from the API
111
+ if (bin !== 'ssh') {
112
+ console.error(`Unexpected SSH command: ${connection.command}`);
113
+ process.exit(1);
114
+ }
66
115
  const sshArgs = parts.slice(1);
67
116
  const child = spawn(bin, sshArgs, { stdio: 'inherit' });
68
117
  child.on('close', (code) => process.exit(code ?? 0));
@@ -1 +1 @@
1
- {"version":3,"file":"ssh.js","sourceRoot":"","sources":["../../../src/cli/commands/ssh.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ssh.js","sourceRoot":"","sources":["../../../src/cli/commands/ssh.ts"],"names":[],"mappings":"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"}
@@ -4,5 +4,6 @@ export interface CliFlags {
4
4
  clientId?: string;
5
5
  clientSecret?: string;
6
6
  baseUrl?: string;
7
+ passwordless?: boolean;
7
8
  }
8
9
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/types.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/types.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB"}
@@ -1 +1 @@
1
- {"version":3,"file":"workspaces.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/workspaces.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA8DlF"}
1
+ {"version":3,"file":"workspaces.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/workspaces.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA+DlF"}
@@ -49,13 +49,14 @@ export async function workspacesCmd(args, flags) {
49
49
  --name <name> Workspace name
50
50
  --cpus <n> CPU cores
51
51
  --memory <mb> Memory in MB
52
- --disk <mb> Disk in MB
52
+ --disk <mb> Writable disk in MB
53
53
  --mode <mode> permanent or temporary
54
54
  --namespace <ns> Namespace
55
- --type <type> Workspace type
55
+ --ssh Enable SSH access on creation
56
56
 
57
57
  Examples:
58
58
  oblien ws create --image node-20 --name my-app --cpus 2 --memory 2048
59
+ oblien ws create --image ubuntu --name dev --ssh
59
60
  oblien ws list --status running --limit 10
60
61
  oblien ws start ws_abc123
61
62
  oblien ws stop ws_abc123
@@ -74,7 +75,7 @@ async function wsCreate(args, flags) {
74
75
  const disk = parseFlag(args, '--disk');
75
76
  const mode = parseFlag(args, '--mode');
76
77
  const namespace = parseFlag(args, '--namespace');
77
- const type = parseFlag(args, '--type');
78
+ const sshAccess = args.includes('--ssh');
78
79
  if (image)
79
80
  params.image = image;
80
81
  if (name)
@@ -83,15 +84,14 @@ async function wsCreate(args, flags) {
83
84
  params.mode = mode;
84
85
  if (namespace)
85
86
  params.namespace = namespace;
86
- if (type)
87
- params.type = type;
88
- if (cpus || memory || disk) {
89
- params.resources = {
90
- ...(cpus ? { cpus: Number(cpus) } : {}),
91
- ...(memory ? { memory_mb: Number(memory) } : {}),
92
- ...(disk ? { writable_size_mb: Number(disk) } : {}),
93
- };
94
- }
87
+ if (cpus)
88
+ params.cpus = Number(cpus);
89
+ if (memory)
90
+ params.memory_mb = Number(memory);
91
+ if (disk)
92
+ params.disk_size_mb = Number(disk);
93
+ if (sshAccess)
94
+ params.config = { ...(params.config || {}), ssh_access: true };
95
95
  const ws = await client.workspaces.create(params);
96
96
  printResult(ws, flags.json);
97
97
  }
@@ -116,10 +116,11 @@ async function wsList(args, flags) {
116
116
  id: w.id,
117
117
  name: w.name ?? '-',
118
118
  status: w.status,
119
+ mode: w.mode ?? '-',
119
120
  image: w.image,
120
121
  created: w.created_at?.slice(0, 10) ?? '-',
121
122
  }));
122
- printTable(rows, ['id', 'name', 'status', 'image', 'created']);
123
+ printTable(rows, ['id', 'name', 'status', 'mode', 'image', 'created']);
123
124
  console.log(`\n${res.total} workspace(s) total`);
124
125
  }
125
126
  }
@@ -236,7 +237,7 @@ async function wsResources(id, args, flags) {
236
237
  if (memory)
237
238
  params.memory_mb = Number(memory);
238
239
  if (disk)
239
- params.writable_size_mb = Number(disk);
240
+ params.disk_size_mb = Number(disk);
240
241
  const method = patch ? 'patch' : 'update';
241
242
  const res = await client.workspaces.resources[method](wsId, params);
242
243
  printResult(res, flags.json);