oblien 2.0.0 → 2.0.2

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 (102) hide show
  1. package/README.md +634 -0
  2. package/dist/cli/auth.d.ts +13 -0
  3. package/dist/cli/auth.d.ts.map +1 -0
  4. package/dist/cli/auth.js +30 -0
  5. package/dist/cli/auth.js.map +1 -0
  6. package/dist/cli/commands/api-access.d.ts +3 -0
  7. package/dist/cli/commands/api-access.d.ts.map +1 -0
  8. package/dist/cli/commands/api-access.js +87 -0
  9. package/dist/cli/commands/api-access.js.map +1 -0
  10. package/dist/cli/commands/config.d.ts +3 -0
  11. package/dist/cli/commands/config.d.ts.map +1 -0
  12. package/dist/cli/commands/config.js +63 -0
  13. package/dist/cli/commands/config.js.map +1 -0
  14. package/dist/cli/commands/exec.d.ts +3 -0
  15. package/dist/cli/commands/exec.d.ts.map +1 -0
  16. package/dist/cli/commands/exec.js +173 -0
  17. package/dist/cli/commands/exec.js.map +1 -0
  18. package/dist/cli/commands/files.d.ts +3 -0
  19. package/dist/cli/commands/files.d.ts.map +1 -0
  20. package/dist/cli/commands/files.js +168 -0
  21. package/dist/cli/commands/files.js.map +1 -0
  22. package/dist/cli/commands/images.d.ts +3 -0
  23. package/dist/cli/commands/images.d.ts.map +1 -0
  24. package/dist/cli/commands/images.js +43 -0
  25. package/dist/cli/commands/images.js.map +1 -0
  26. package/dist/cli/commands/lifecycle.d.ts +3 -0
  27. package/dist/cli/commands/lifecycle.d.ts.map +1 -0
  28. package/dist/cli/commands/lifecycle.js +88 -0
  29. package/dist/cli/commands/lifecycle.js.map +1 -0
  30. package/dist/cli/commands/logs.d.ts +3 -0
  31. package/dist/cli/commands/logs.d.ts.map +1 -0
  32. package/dist/cli/commands/logs.js +104 -0
  33. package/dist/cli/commands/logs.js.map +1 -0
  34. package/dist/cli/commands/metadata.d.ts +3 -0
  35. package/dist/cli/commands/metadata.d.ts.map +1 -0
  36. package/dist/cli/commands/metadata.js +73 -0
  37. package/dist/cli/commands/metadata.js.map +1 -0
  38. package/dist/cli/commands/metrics.d.ts +3 -0
  39. package/dist/cli/commands/metrics.d.ts.map +1 -0
  40. package/dist/cli/commands/metrics.js +57 -0
  41. package/dist/cli/commands/metrics.js.map +1 -0
  42. package/dist/cli/commands/network.d.ts +3 -0
  43. package/dist/cli/commands/network.d.ts.map +1 -0
  44. package/dist/cli/commands/network.js +88 -0
  45. package/dist/cli/commands/network.js.map +1 -0
  46. package/dist/cli/commands/public-access.d.ts +3 -0
  47. package/dist/cli/commands/public-access.d.ts.map +1 -0
  48. package/dist/cli/commands/public-access.js +92 -0
  49. package/dist/cli/commands/public-access.js.map +1 -0
  50. package/dist/cli/commands/search.d.ts +3 -0
  51. package/dist/cli/commands/search.d.ts.map +1 -0
  52. package/dist/cli/commands/search.js +134 -0
  53. package/dist/cli/commands/search.js.map +1 -0
  54. package/dist/cli/commands/skills.d.ts +3 -0
  55. package/dist/cli/commands/skills.d.ts.map +1 -0
  56. package/dist/cli/commands/skills.js +156 -0
  57. package/dist/cli/commands/skills.js.map +1 -0
  58. package/dist/cli/commands/snapshots.d.ts +3 -0
  59. package/dist/cli/commands/snapshots.d.ts.map +1 -0
  60. package/dist/cli/commands/snapshots.js +100 -0
  61. package/dist/cli/commands/snapshots.js.map +1 -0
  62. package/dist/cli/commands/ssh.d.ts +3 -0
  63. package/dist/cli/commands/ssh.d.ts.map +1 -0
  64. package/dist/cli/commands/ssh.js +81 -0
  65. package/dist/cli/commands/ssh.js.map +1 -0
  66. package/dist/cli/commands/terminal.d.ts +3 -0
  67. package/dist/cli/commands/terminal.d.ts.map +1 -0
  68. package/dist/cli/commands/terminal.js +109 -0
  69. package/dist/cli/commands/terminal.js.map +1 -0
  70. package/dist/cli/commands/types.d.ts +8 -0
  71. package/dist/cli/commands/types.d.ts.map +1 -0
  72. package/dist/cli/commands/types.js +2 -0
  73. package/dist/cli/commands/types.js.map +1 -0
  74. package/dist/cli/commands/usage.d.ts +3 -0
  75. package/dist/cli/commands/usage.d.ts.map +1 -0
  76. package/dist/cli/commands/usage.js +98 -0
  77. package/dist/cli/commands/usage.js.map +1 -0
  78. package/dist/cli/commands/watcher.d.ts +3 -0
  79. package/dist/cli/commands/watcher.d.ts.map +1 -0
  80. package/dist/cli/commands/watcher.js +108 -0
  81. package/dist/cli/commands/watcher.js.map +1 -0
  82. package/dist/cli/commands/workloads.d.ts +3 -0
  83. package/dist/cli/commands/workloads.d.ts.map +1 -0
  84. package/dist/cli/commands/workloads.js +232 -0
  85. package/dist/cli/commands/workloads.js.map +1 -0
  86. package/dist/cli/commands/workspaces.d.ts +3 -0
  87. package/dist/cli/commands/workspaces.d.ts.map +1 -0
  88. package/dist/cli/commands/workspaces.js +255 -0
  89. package/dist/cli/commands/workspaces.js.map +1 -0
  90. package/dist/cli/config-store.d.ts +10 -0
  91. package/dist/cli/config-store.d.ts.map +1 -0
  92. package/dist/cli/config-store.js +28 -0
  93. package/dist/cli/config-store.js.map +1 -0
  94. package/dist/cli/index.d.ts +12 -0
  95. package/dist/cli/index.d.ts.map +1 -0
  96. package/dist/cli/index.js +199 -0
  97. package/dist/cli/index.js.map +1 -0
  98. package/dist/cli/output.d.ts +21 -0
  99. package/dist/cli/output.d.ts.map +1 -0
  100. package/dist/cli/output.js +108 -0
  101. package/dist/cli/output.js.map +1 -0
  102. package/package.json +6 -2
@@ -0,0 +1,255 @@
1
+ import { buildClient } from '../auth.js';
2
+ import { printResult, printSuccess, printTable } from '../output.js';
3
+ export async function workspacesCmd(args, flags) {
4
+ const sub = args[0];
5
+ switch (sub) {
6
+ case 'create': return wsCreate(args.slice(1), flags);
7
+ case 'list':
8
+ case 'ls': return wsList(args.slice(1), flags);
9
+ case 'get': return wsGet(args[1], flags);
10
+ case 'update': return wsUpdate(args[1], args.slice(2), flags);
11
+ case 'delete':
12
+ case 'rm': return wsDelete(args[1], flags);
13
+ case 'start': return wsPower('start', args[1], flags);
14
+ case 'stop': return wsPower('stop', args[1], flags);
15
+ case 'restart': return wsPower('restart', args[1], flags);
16
+ case 'pause': return wsPower('pause', args[1], flags);
17
+ case 'resume': return wsPower('resume', args[1], flags);
18
+ case 'ping': return wsPing(args[1], args.slice(2), flags);
19
+ case 'quota': return wsQuota(flags);
20
+ case 'estimate': return wsEstimate(args.slice(1), flags);
21
+ case 'health': return wsHealth(args[1], flags);
22
+ case 'details': return wsDetails(args[1], flags);
23
+ case 'resources': return wsResources(args[1], args.slice(2), flags);
24
+ default:
25
+ console.log(`
26
+ oblien ws — Manage workspaces
27
+
28
+ Usage:
29
+ oblien ws create [flags] Create a workspace
30
+ oblien ws list List workspaces
31
+ oblien ws get <id> Get workspace details
32
+ oblien ws update <id> [flags] Update workspace
33
+ oblien ws delete <id> Delete workspace
34
+ oblien ws start <id> Start workspace
35
+ oblien ws stop <id> Stop workspace
36
+ oblien ws restart <id> Restart workspace
37
+ oblien ws pause <id> Pause workspace
38
+ oblien ws resume <id> Resume paused workspace
39
+ oblien ws ping <id> Keep-alive ping (renew TTL)
40
+ oblien ws quota Show resource quota
41
+ oblien ws estimate [flags] Estimate cost
42
+ oblien ws health <id> Check runtime health
43
+ oblien ws details <id> Get aggregated details
44
+ oblien ws resources <id> Get/update resources (--patch for partial)
45
+
46
+ Create flags:
47
+ --image <image> Base image (e.g., node-20, python-3, ubuntu)
48
+ --name <name> Workspace name
49
+ --cpus <n> CPU cores
50
+ --memory <mb> Memory in MB
51
+ --disk <mb> Disk in MB
52
+ --mode <mode> permanent or temporary
53
+ --namespace <ns> Namespace
54
+ --type <type> Workspace type
55
+
56
+ Examples:
57
+ oblien ws create --image node-20 --name my-app --cpus 2 --memory 2048
58
+ oblien ws list --status running --limit 10
59
+ oblien ws start ws_abc123
60
+ oblien ws stop ws_abc123
61
+ oblien ws resources ws_abc123 --cpus 4 --memory 4096
62
+ `);
63
+ }
64
+ }
65
+ // ── Helpers ─────────────────────────────────────────────────────────
66
+ function parseFlag(args, flag) {
67
+ const idx = args.indexOf(flag);
68
+ return idx >= 0 && idx + 1 < args.length ? args[idx + 1] : undefined;
69
+ }
70
+ function requireId(id, cmd) {
71
+ if (!id || id.startsWith('-')) {
72
+ console.error(`Usage: oblien ws ${cmd} <workspace-id>`);
73
+ process.exit(1);
74
+ }
75
+ return id;
76
+ }
77
+ // ── Commands ────────────────────────────────────────────────────────
78
+ async function wsCreate(args, flags) {
79
+ const client = buildClient(flags);
80
+ const params = {};
81
+ const image = parseFlag(args, '--image');
82
+ const name = parseFlag(args, '--name');
83
+ const cpus = parseFlag(args, '--cpus');
84
+ const memory = parseFlag(args, '--memory');
85
+ const disk = parseFlag(args, '--disk');
86
+ const mode = parseFlag(args, '--mode');
87
+ const namespace = parseFlag(args, '--namespace');
88
+ const type = parseFlag(args, '--type');
89
+ if (image)
90
+ params.image = image;
91
+ if (name)
92
+ params.name = name;
93
+ if (mode)
94
+ params.mode = mode;
95
+ if (namespace)
96
+ params.namespace = namespace;
97
+ if (type)
98
+ params.type = type;
99
+ if (cpus || memory || disk) {
100
+ params.resources = {
101
+ ...(cpus ? { cpus: Number(cpus) } : {}),
102
+ ...(memory ? { memory_mb: Number(memory) } : {}),
103
+ ...(disk ? { writable_size_mb: Number(disk) } : {}),
104
+ };
105
+ }
106
+ const ws = await client.workspaces.create(params);
107
+ printResult(ws, flags.json);
108
+ }
109
+ async function wsList(args, flags) {
110
+ const client = buildClient(flags);
111
+ const params = {};
112
+ const status = parseFlag(args, '--status');
113
+ const limit = parseFlag(args, '--limit');
114
+ const page = parseFlag(args, '--page');
115
+ if (status)
116
+ params.status = status;
117
+ if (limit)
118
+ params.limit = Number(limit);
119
+ if (page)
120
+ params.page = Number(page);
121
+ const res = await client.workspaces.list(params);
122
+ if (flags.json) {
123
+ printResult(res, true);
124
+ }
125
+ else {
126
+ const rows = res.workspaces.map(w => ({
127
+ id: w.id,
128
+ name: w.name ?? '-',
129
+ status: w.status,
130
+ image: w.image,
131
+ created: w.created_at?.slice(0, 10) ?? '-',
132
+ }));
133
+ printTable(rows, ['id', 'name', 'status', 'image', 'created']);
134
+ console.log(`\n${res.total} workspace(s) total`);
135
+ }
136
+ }
137
+ async function wsGet(id, flags) {
138
+ const wsId = requireId(id, 'get');
139
+ const client = buildClient(flags);
140
+ const ws = await client.workspaces.get(wsId);
141
+ printResult(ws, flags.json);
142
+ }
143
+ async function wsUpdate(id, args, flags) {
144
+ const wsId = requireId(id, 'update');
145
+ const client = buildClient(flags);
146
+ // Collect all --key value pairs as update params
147
+ const params = {};
148
+ for (let i = 0; i < args.length; i++) {
149
+ if (args[i].startsWith('--') && i + 1 < args.length) {
150
+ const key = args[i].slice(2).replace(/-/g, '_');
151
+ params[key] = args[++i];
152
+ }
153
+ }
154
+ const ws = await client.workspaces.update(wsId, params);
155
+ printResult(ws, flags.json);
156
+ }
157
+ async function wsDelete(id, flags) {
158
+ const wsId = requireId(id, 'delete');
159
+ const client = buildClient(flags);
160
+ await client.workspaces.delete(wsId);
161
+ printSuccess(`Deleted workspace ${wsId}`);
162
+ }
163
+ async function wsPower(action, id, flags) {
164
+ const wsId = requireId(id, action);
165
+ const client = buildClient(flags);
166
+ switch (action) {
167
+ case 'start':
168
+ await client.workspaces.start(wsId);
169
+ break;
170
+ case 'stop':
171
+ await client.workspaces.stop(wsId);
172
+ break;
173
+ case 'restart':
174
+ await client.workspaces.restart(wsId);
175
+ break;
176
+ case 'pause':
177
+ await client.workspaces.pause(wsId);
178
+ break;
179
+ case 'resume':
180
+ await client.workspaces.resume(wsId);
181
+ break;
182
+ }
183
+ printSuccess(`${action}: ${wsId}`);
184
+ }
185
+ async function wsPing(id, args, flags) {
186
+ const wsId = requireId(id, 'ping');
187
+ const client = buildClient(flags);
188
+ const ttl = parseFlag(args, '--ttl');
189
+ await client.workspaces.ping(wsId, ttl ? { ttl_seconds: Number(ttl) } : undefined);
190
+ printSuccess(`Pinged ${wsId}${ttl ? ` (TTL: ${ttl}s)` : ''}`);
191
+ }
192
+ async function wsQuota(flags) {
193
+ const client = buildClient(flags);
194
+ const res = await client.workspaces.getQuota();
195
+ printResult(res, flags.json);
196
+ }
197
+ async function wsEstimate(args, flags) {
198
+ const client = buildClient(flags);
199
+ const params = {};
200
+ const cpus = parseFlag(args, '--cpus');
201
+ const ram = parseFlag(args, '--memory');
202
+ const disk = parseFlag(args, '--disk');
203
+ if (cpus)
204
+ params.cpu = Number(cpus);
205
+ if (ram)
206
+ params.ram_mb = Number(ram);
207
+ if (disk)
208
+ params.disk_mb = Number(disk);
209
+ const res = await client.workspaces.getEstimate(params);
210
+ printResult(res, flags.json);
211
+ }
212
+ async function wsHealth(id, flags) {
213
+ const wsId = requireId(id, 'health');
214
+ const client = buildClient(flags);
215
+ const rt = await client.workspaces.runtime(wsId);
216
+ const ok = await rt.health();
217
+ if (flags.json) {
218
+ printResult({ healthy: ok }, true);
219
+ }
220
+ else {
221
+ console.log(ok ? '✓ Healthy' : '✗ Unhealthy');
222
+ }
223
+ }
224
+ async function wsDetails(id, flags) {
225
+ const wsId = requireId(id, 'details');
226
+ const client = buildClient(flags);
227
+ const res = await client.workspaces.getDetails(wsId);
228
+ printResult(res, flags.json);
229
+ }
230
+ async function wsResources(id, args, flags) {
231
+ const wsId = requireId(id, 'resources');
232
+ const client = buildClient(flags);
233
+ const patch = args.includes('--patch');
234
+ // If any flags provided — update; otherwise — get
235
+ const cpus = parseFlag(args, '--cpus');
236
+ const memory = parseFlag(args, '--memory');
237
+ const disk = parseFlag(args, '--disk');
238
+ if (cpus || memory || disk) {
239
+ const params = {};
240
+ if (cpus)
241
+ params.cpus = Number(cpus);
242
+ if (memory)
243
+ params.memory_mb = Number(memory);
244
+ if (disk)
245
+ params.writable_size_mb = Number(disk);
246
+ const method = patch ? 'patch' : 'update';
247
+ const res = await client.workspaces.resources[method](wsId, params);
248
+ printResult(res, flags.json);
249
+ }
250
+ else {
251
+ const res = await client.workspaces.resources.get(wsId);
252
+ printResult(res, flags.json);
253
+ }
254
+ }
255
+ //# sourceMappingURL=workspaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspaces.js","sourceRoot":"","sources":["../../../src/cli/commands/workspaces.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export interface StoredCredentials {
2
+ clientId: string;
3
+ clientSecret: string;
4
+ baseUrl?: string;
5
+ }
6
+ export declare function configPath(): string;
7
+ export declare function loadConfig(): StoredCredentials | null;
8
+ export declare function saveConfig(creds: StoredCredentials): void;
9
+ export declare function clearConfig(): void;
10
+ //# sourceMappingURL=config-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-store.d.ts","sourceRoot":"","sources":["../../src/cli/config-store.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,wBAAgB,UAAU,IAAI,iBAAiB,GAAG,IAAI,CAOrD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAGzD;AAED,wBAAgB,WAAW,IAAI,IAAI,CAIlC"}
@@ -0,0 +1,28 @@
1
+ import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { homedir } from 'node:os';
4
+ const CONFIG_DIR = join(homedir(), '.oblien');
5
+ const CONFIG_FILE = join(CONFIG_DIR, 'credentials.json');
6
+ export function configPath() {
7
+ return CONFIG_FILE;
8
+ }
9
+ export function loadConfig() {
10
+ if (!existsSync(CONFIG_FILE))
11
+ return null;
12
+ try {
13
+ return JSON.parse(readFileSync(CONFIG_FILE, 'utf-8'));
14
+ }
15
+ catch {
16
+ return null;
17
+ }
18
+ }
19
+ export function saveConfig(creds) {
20
+ mkdirSync(CONFIG_DIR, { recursive: true });
21
+ writeFileSync(CONFIG_FILE, JSON.stringify(creds, null, 2) + '\n', { mode: 0o600 });
22
+ }
23
+ export function clearConfig() {
24
+ if (existsSync(CONFIG_FILE)) {
25
+ writeFileSync(CONFIG_FILE, '{}', { mode: 0o600 });
26
+ }
27
+ }
28
+ //# sourceMappingURL=config-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-store.js","sourceRoot":"","sources":["../../src/cli/config-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AAC9C,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;AAQzD,MAAM,UAAU,UAAU;IACxB,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAwB;IACjD,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AACrF,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5B,aAAa,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACpD,CAAC;AACH,CAAC"}
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * oblien CLI — manage workspaces, skills, and interact with the Oblien API from the command line.
4
+ *
5
+ * Usage:
6
+ * oblien <command> [subcommand] [args] [flags]
7
+ *
8
+ * This is a thin wrapper around the oblien SDK. Every command maps directly
9
+ * to an SDK method — no extra logic, no magic.
10
+ */
11
+ export {};
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;GAQG"}
@@ -0,0 +1,199 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * oblien CLI — manage workspaces, skills, and interact with the Oblien API from the command line.
4
+ *
5
+ * Usage:
6
+ * oblien <command> [subcommand] [args] [flags]
7
+ *
8
+ * This is a thin wrapper around the oblien SDK. Every command maps directly
9
+ * to an SDK method — no extra logic, no magic.
10
+ */
11
+ import { extractGlobalFlags } from './output.js';
12
+ import { configCmd } from './commands/config.js';
13
+ import { skillsCmd } from './commands/skills.js';
14
+ import { workspacesCmd } from './commands/workspaces.js';
15
+ import { execCmd } from './commands/exec.js';
16
+ import { filesCmd } from './commands/files.js';
17
+ import { searchCmd } from './commands/search.js';
18
+ import { networkCmd } from './commands/network.js';
19
+ import { apiAccessCmd } from './commands/api-access.js';
20
+ import { lifecycleCmd } from './commands/lifecycle.js';
21
+ import { imagesCmd } from './commands/images.js';
22
+ import { logsCmd } from './commands/logs.js';
23
+ import { snapshotsCmd } from './commands/snapshots.js';
24
+ import { sshCmd } from './commands/ssh.js';
25
+ import { publicAccessCmd } from './commands/public-access.js';
26
+ import { workloadsCmd } from './commands/workloads.js';
27
+ import { metricsCmd } from './commands/metrics.js';
28
+ import { usageCmd } from './commands/usage.js';
29
+ import { metadataCmd } from './commands/metadata.js';
30
+ import { terminalCmd } from './commands/terminal.js';
31
+ import { watcherCmd } from './commands/watcher.js';
32
+ // ── Version ─────────────────────────────────────────────────────────
33
+ function version() {
34
+ // Read from package.json at build time isn't worth it — just hardcode.
35
+ console.log('oblien/2.0.1');
36
+ }
37
+ // ── Help ────────────────────────────────────────────────────────────
38
+ function help() {
39
+ console.log(`
40
+ oblien — Oblien CLI
41
+
42
+ Usage:
43
+ oblien <command> [subcommand] [args] [flags]
44
+
45
+ Commands:
46
+ config Manage credentials (~/.oblien/credentials.json)
47
+ skills Install, list, and remove agent skills
48
+
49
+ ws, workspaces Create, list, start, stop, delete workspaces
50
+ exec Execute commands inside a workspace
51
+ files Read, write, list, delete files in a workspace
52
+ search Search code and filenames in a workspace
53
+
54
+ network View and update workspace network config
55
+ api-access Enable/disable Internal API, get tokens
56
+ lifecycle Manage permanent/temporary mode and TTL
57
+ snapshots Create and manage snapshots and archives
58
+ images Browse available workspace images
59
+ logs View and stream workspace logs
60
+
61
+ ssh Manage SSH access (enable, keys, passwords)
62
+ public-access Expose and revoke public ports
63
+ workloads Manage workloads (containers/processes)
64
+ metrics View workspace resource metrics
65
+ usage View usage, credits, and tracking
66
+ metadata Manage workspace key-value metadata
67
+ terminal Manage runtime terminal sessions
68
+ watcher Manage file system watchers
69
+
70
+ Global flags:
71
+ --json Output as JSON
72
+ --client-id <id> Override client ID
73
+ --client-secret <s> Override client secret
74
+ --base-url <url> Override API base URL
75
+ -v, --version Show version
76
+ -h, --help Show this help
77
+
78
+ Auth (in priority order):
79
+ 1. --client-id / --client-secret flags
80
+ 2. OBLIEN_CLIENT_ID / OBLIEN_CLIENT_SECRET env vars
81
+ 3. ~/.oblien/credentials.json (set via: oblien config set)
82
+
83
+ Examples:
84
+ oblien config set
85
+ oblien skills install oblien-runtime --agent claude
86
+ oblien ws create --image node-20 --name my-app
87
+ oblien ws list
88
+ oblien ws start ws_abc123
89
+ oblien exec ws_abc123 -- npm test
90
+ oblien files ls ws_abc123 /app
91
+ oblien files cat ws_abc123 /app/index.js
92
+ oblien search ws_abc123 "TODO"
93
+ oblien api-access enable ws_abc123
94
+ oblien logs boot ws_abc123
95
+ oblien images list
96
+ oblien ssh enable ws_abc123
97
+ oblien public-access expose ws_abc123 --port 3000
98
+ oblien workloads list ws_abc123
99
+ oblien metrics stats ws_abc123
100
+ oblien usage global
101
+ oblien metadata get ws_abc123
102
+ oblien terminal list ws_abc123
103
+ oblien watcher create ws_abc123 --path /app/src
104
+ `.trimStart());
105
+ }
106
+ // ── Main ────────────────────────────────────────────────────────────
107
+ async function main() {
108
+ const raw = process.argv.slice(2);
109
+ if (raw.length === 0 || raw[0] === '-h' || raw[0] === '--help') {
110
+ help();
111
+ return;
112
+ }
113
+ if (raw[0] === '-v' || raw[0] === '--version') {
114
+ version();
115
+ return;
116
+ }
117
+ const command = raw[0];
118
+ const rest = raw.slice(1);
119
+ const globals = extractGlobalFlags(rest);
120
+ const args = globals.remaining;
121
+ const flags = { json: globals.json, clientId: globals.clientId, clientSecret: globals.clientSecret, baseUrl: globals.baseUrl };
122
+ try {
123
+ switch (command) {
124
+ case 'config':
125
+ await configCmd(args, flags);
126
+ break;
127
+ case 'skills':
128
+ await skillsCmd(args, flags);
129
+ break;
130
+ case 'ws':
131
+ case 'workspaces':
132
+ await workspacesCmd(args, flags);
133
+ break;
134
+ case 'exec':
135
+ await execCmd(rest, flags); // pass full rest — exec needs -- handling
136
+ break;
137
+ case 'files':
138
+ await filesCmd(args, flags);
139
+ break;
140
+ case 'search':
141
+ await searchCmd(args, flags);
142
+ break;
143
+ case 'network':
144
+ await networkCmd(args, flags);
145
+ break;
146
+ case 'api-access':
147
+ await apiAccessCmd(args, flags);
148
+ break;
149
+ case 'lifecycle':
150
+ await lifecycleCmd(args, flags);
151
+ break;
152
+ case 'snapshots':
153
+ await snapshotsCmd(args, flags);
154
+ break;
155
+ case 'images':
156
+ await imagesCmd(args, flags);
157
+ break;
158
+ case 'logs':
159
+ await logsCmd(args, flags);
160
+ break;
161
+ case 'ssh':
162
+ await sshCmd(args, flags);
163
+ break;
164
+ case 'public-access':
165
+ await publicAccessCmd(args, flags);
166
+ break;
167
+ case 'workloads':
168
+ await workloadsCmd(args, flags);
169
+ break;
170
+ case 'metrics':
171
+ await metricsCmd(args, flags);
172
+ break;
173
+ case 'usage':
174
+ await usageCmd(args, flags);
175
+ break;
176
+ case 'metadata':
177
+ await metadataCmd(args, flags);
178
+ break;
179
+ case 'terminal':
180
+ await terminalCmd(args, flags);
181
+ break;
182
+ case 'watcher':
183
+ await watcherCmd(args, flags);
184
+ break;
185
+ default:
186
+ console.error(`Unknown command: ${command}\n`);
187
+ help();
188
+ process.exit(1);
189
+ }
190
+ }
191
+ catch (err) {
192
+ const msg = err instanceof Error ? err.message : String(err);
193
+ const code = err.status;
194
+ console.error(`✗ ${msg}${code ? ` (HTTP ${code})` : ''}`);
195
+ process.exit(1);
196
+ }
197
+ }
198
+ main();
199
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Output utilities — JSON by default, table when --table is passed.
3
+ */
4
+ export declare function printJson(data: unknown): void;
5
+ export declare function printTable(rows: Record<string, unknown>[], columns?: string[]): void;
6
+ export declare function printSuccess(message: string): void;
7
+ export declare function printError(message: string): void;
8
+ export declare function printKeyValue(data: Record<string, unknown>, indent?: number): void;
9
+ /**
10
+ * Parse global flags from args, return remaining args.
11
+ */
12
+ export declare function extractGlobalFlags(args: string[]): {
13
+ json: boolean;
14
+ clientId?: string;
15
+ clientSecret?: string;
16
+ baseUrl?: string;
17
+ remaining: string[];
18
+ };
19
+ /** Print a result — JSON if --json flag, otherwise key-value. */
20
+ export declare function printResult(data: unknown, json: boolean): void;
21
+ //# sourceMappingURL=output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/cli/output.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAE7C;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAwBpF;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAElD;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEhD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,SAAI,GAAG,IAAI,CAa7E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG;IAClD,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB,CA8BA;AAED,iEAAiE;AACjE,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAgB9D"}