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,134 @@
1
+ import { buildClient } from '../auth.js';
2
+ import { printResult } from '../output.js';
3
+ export async function searchCmd(args, flags) {
4
+ const sub = args[0];
5
+ // oblien search files <ws-id> <query> — filename search
6
+ // oblien search <ws-id> <query> — content search (default)
7
+ if (sub === 'files') {
8
+ return searchFiles(args[1], args.slice(2), flags);
9
+ }
10
+ if (sub === 'status') {
11
+ return searchStatus(args[1], flags);
12
+ }
13
+ if (sub === 'init') {
14
+ return searchInit(args[1], flags);
15
+ }
16
+ if (sub === '--help' || sub === '-h' || !sub) {
17
+ console.log(`
18
+ oblien search — Search in a workspace
19
+
20
+ Usage:
21
+ oblien search <ws-id> <query> [flags] Content search (ripgrep)
22
+ oblien search files <ws-id> <query> [flags] Filename search
23
+ oblien search status <ws-id> Check search engine status
24
+ oblien search init <ws-id> Initialize search engine
25
+
26
+ Content search flags:
27
+ --dir <path> Search directory (default: /)
28
+ --regex Treat query as regex
29
+ --whole-word Match whole words only
30
+ --context <n> Lines of context around matches
31
+
32
+ Filename search flags:
33
+ --dir <path> Search directory (default: /)
34
+
35
+ Examples:
36
+ oblien search ws_abc123 "TODO"
37
+ oblien search ws_abc123 "function.*main" --regex
38
+ oblien search files ws_abc123 "*.ts"
39
+ `);
40
+ return;
41
+ }
42
+ return searchContent(sub, args.slice(1), flags);
43
+ }
44
+ function parseFlag(args, flag) {
45
+ const idx = args.indexOf(flag);
46
+ return idx >= 0 && idx + 1 < args.length ? args[idx + 1] : undefined;
47
+ }
48
+ async function searchContent(wsId, args, flags) {
49
+ const query = args.find(a => !a.startsWith('-'));
50
+ if (!query) {
51
+ console.error('Usage: oblien search <ws-id> <query>');
52
+ process.exit(1);
53
+ }
54
+ const client = buildClient(flags);
55
+ const rt = await client.workspaces.runtime(wsId);
56
+ const params = { query };
57
+ const dir = parseFlag(args, '--dir');
58
+ const context = parseFlag(args, '--context');
59
+ if (dir)
60
+ params.path = dir;
61
+ if (args.includes('--regex'))
62
+ params.regex = true;
63
+ if (args.includes('--whole-word'))
64
+ params.wholeWord = true;
65
+ if (context)
66
+ params.contextLines = Number(context);
67
+ const res = await rt.search.content(params);
68
+ if (flags.json) {
69
+ printResult(res, true);
70
+ }
71
+ else {
72
+ const matches = res.matches ?? [];
73
+ if (matches.length === 0) {
74
+ console.log('No matches found.');
75
+ return;
76
+ }
77
+ for (const m of matches) {
78
+ console.log(`${m.path}:${m.line_number ?? ''} ${m.line ?? m.text ?? ''}`);
79
+ }
80
+ console.log(`\n${matches.length} match(es)`);
81
+ }
82
+ }
83
+ async function searchFiles(wsId, args, flags) {
84
+ if (!wsId) {
85
+ console.error('Usage: oblien search files <ws-id> <query>');
86
+ process.exit(1);
87
+ }
88
+ const query = args.find(a => !a.startsWith('-'));
89
+ if (!query) {
90
+ console.error('Usage: oblien search files <ws-id> <query>');
91
+ process.exit(1);
92
+ }
93
+ const client = buildClient(flags);
94
+ const rt = await client.workspaces.runtime(wsId);
95
+ const params = { query };
96
+ const dir = parseFlag(args, '--dir');
97
+ if (dir)
98
+ params.path = dir;
99
+ const res = await rt.search.files(params);
100
+ if (flags.json) {
101
+ printResult(res, true);
102
+ }
103
+ else {
104
+ const files = res.files ?? [];
105
+ if (files.length === 0) {
106
+ console.log('No files found.');
107
+ return;
108
+ }
109
+ for (const f of files) {
110
+ console.log(typeof f === 'string' ? f : f.path ?? f.name ?? JSON.stringify(f));
111
+ }
112
+ }
113
+ }
114
+ async function searchStatus(wsId, flags) {
115
+ if (!wsId) {
116
+ console.error('Usage: oblien search status <ws-id>');
117
+ process.exit(1);
118
+ }
119
+ const client = buildClient(flags);
120
+ const rt = await client.workspaces.runtime(wsId);
121
+ const res = await rt.search.status();
122
+ printResult(res, flags.json);
123
+ }
124
+ async function searchInit(wsId, flags) {
125
+ if (!wsId) {
126
+ console.error('Usage: oblien search init <ws-id>');
127
+ process.exit(1);
128
+ }
129
+ const client = buildClient(flags);
130
+ const rt = await client.workspaces.runtime(wsId);
131
+ const res = await rt.search.init();
132
+ printResult(res, flags.json);
133
+ }
134
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/cli/commands/search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { CliFlags } from './types.js';
2
+ export declare function skillsCmd(args: string[], _flags: CliFlags): Promise<void>;
3
+ //# sourceMappingURL=skills.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/skills.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAqE3C,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAgC/E"}
@@ -0,0 +1,156 @@
1
+ import { existsSync, mkdirSync, writeFileSync, rmSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { printSuccess, printError, printTable } from '../output.js';
4
+ const SKILLS_BASE_URL = 'https://oblien.com/skills';
5
+ const MANIFEST_URL = `${SKILLS_BASE_URL}/manifest.json`;
6
+ const ALL_SKILLS = [
7
+ 'oblien-runtime',
8
+ 'oblien-api',
9
+ 'oblien-networking',
10
+ 'oblien-platform',
11
+ 'oblien-files',
12
+ 'oblien-search',
13
+ 'oblien-exec',
14
+ 'oblien-terminal',
15
+ 'oblien-watcher',
16
+ ];
17
+ const AGENTS = {
18
+ claude: root => join(root, '.claude', 'skills'),
19
+ cursor: root => join(root, '.cursor', 'skills'),
20
+ openclaw: root => join(root, 'skills'),
21
+ goose: root => join(root, '.goose', 'skills'),
22
+ jetbrains: root => join(root, '.jb-ai', 'skills'),
23
+ };
24
+ function detectAgent(root) {
25
+ // Check for agent directories in order of priority
26
+ if (existsSync(join(root, '.claude')))
27
+ return { name: 'claude', dir: AGENTS.claude(root) };
28
+ if (existsSync(join(root, '.cursor')))
29
+ return { name: 'cursor', dir: AGENTS.cursor(root) };
30
+ if (existsSync(join(root, '.goose')))
31
+ return { name: 'goose', dir: AGENTS.goose(root) };
32
+ if (existsSync(join(root, '.jb-ai')))
33
+ return { name: 'jetbrains', dir: AGENTS.jetbrains(root) };
34
+ // Default to Claude Code (most common)
35
+ return { name: 'claude', dir: AGENTS.claude(root) };
36
+ }
37
+ function resolveSkillsDir(args) {
38
+ let agent;
39
+ let customPath;
40
+ for (let i = 0; i < args.length; i++) {
41
+ if (args[i] === '--agent' && i + 1 < args.length)
42
+ agent = args[++i];
43
+ else if (args[i] === '--path' && i + 1 < args.length)
44
+ customPath = args[++i];
45
+ }
46
+ if (customPath)
47
+ return customPath;
48
+ const root = process.cwd();
49
+ if (agent) {
50
+ const resolver = AGENTS[agent];
51
+ if (!resolver) {
52
+ console.error(`Unknown agent: ${agent}\nSupported: ${Object.keys(AGENTS).join(', ')}`);
53
+ process.exit(1);
54
+ }
55
+ return resolver(root);
56
+ }
57
+ const detected = detectAgent(root);
58
+ return detected.dir;
59
+ }
60
+ // ── Commands ────────────────────────────────────────────────────────
61
+ export async function skillsCmd(args, _flags) {
62
+ const sub = args[0];
63
+ switch (sub) {
64
+ case 'install':
65
+ return installSkills(args.slice(1));
66
+ case 'list':
67
+ return listSkills();
68
+ case 'remove':
69
+ return removeSkill(args.slice(1));
70
+ default:
71
+ console.log(`
72
+ oblien skills — Manage agent skills
73
+
74
+ Usage:
75
+ oblien skills install <name...> Install skill(s)
76
+ oblien skills install --all Install all skills
77
+ oblien skills list List available skills
78
+ oblien skills remove <name> Remove an installed skill
79
+
80
+ Flags:
81
+ --agent <name> Target agent (claude, cursor, openclaw, goose, jetbrains)
82
+ --path <dir> Custom install directory
83
+ --all Install all 9 skills
84
+
85
+ Examples:
86
+ oblien skills install oblien-runtime
87
+ oblien skills install oblien-runtime oblien-api --agent claude
88
+ oblien skills install --all --agent cursor
89
+ oblien skills remove oblien-runtime
90
+ `);
91
+ }
92
+ }
93
+ async function installSkills(args) {
94
+ const isAll = args.includes('--all');
95
+ const names = isAll
96
+ ? ALL_SKILLS
97
+ : args.filter(a => !a.startsWith('--') && !(args[args.indexOf(a) - 1]?.startsWith('--')));
98
+ if (names.length === 0) {
99
+ console.error('Usage: oblien skills install <name...> [--agent <agent>] [--all]');
100
+ process.exit(1);
101
+ }
102
+ const skillsDir = resolveSkillsDir(args);
103
+ for (const name of names) {
104
+ if (!ALL_SKILLS.includes(name) && !isAll) {
105
+ printError(`Unknown skill: ${name}`);
106
+ console.error(`Available: ${ALL_SKILLS.join(', ')}`);
107
+ process.exit(1);
108
+ }
109
+ const url = `${SKILLS_BASE_URL}/${name}/SKILL.md`;
110
+ const dest = join(skillsDir, name);
111
+ try {
112
+ const res = await fetch(url);
113
+ if (!res.ok)
114
+ throw new Error(`HTTP ${res.status}`);
115
+ const content = await res.text();
116
+ mkdirSync(dest, { recursive: true });
117
+ writeFileSync(join(dest, 'SKILL.md'), content, 'utf-8');
118
+ printSuccess(`${name} → ${dest}/SKILL.md`);
119
+ }
120
+ catch (err) {
121
+ printError(`Failed to install ${name}: ${err instanceof Error ? err.message : err}`);
122
+ }
123
+ }
124
+ }
125
+ async function listSkills() {
126
+ try {
127
+ const res = await fetch(MANIFEST_URL);
128
+ if (!res.ok)
129
+ throw new Error(`HTTP ${res.status}`);
130
+ const manifest = await res.json();
131
+ printTable(manifest.skills.map(s => ({ name: s.name, description: s.description })), ['name', 'description']);
132
+ }
133
+ catch {
134
+ // Fallback — just list the known skills
135
+ console.log('Available skills:\n');
136
+ for (const name of ALL_SKILLS) {
137
+ console.log(` ${name}`);
138
+ }
139
+ }
140
+ }
141
+ async function removeSkill(args) {
142
+ const name = args.find(a => !a.startsWith('--'));
143
+ if (!name) {
144
+ console.error('Usage: oblien skills remove <name> [--agent <agent>]');
145
+ process.exit(1);
146
+ }
147
+ const skillsDir = resolveSkillsDir(args);
148
+ const dest = join(skillsDir, name);
149
+ if (!existsSync(dest)) {
150
+ printError(`Skill not found: ${dest}`);
151
+ process.exit(1);
152
+ }
153
+ rmSync(dest, { recursive: true });
154
+ printSuccess(`Removed ${name} from ${skillsDir}`);
155
+ }
156
+ //# sourceMappingURL=skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../../src/cli/commands/skills.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { CliFlags } from './types.js';
2
+ export declare function snapshotsCmd(args: string[], flags: CliFlags): Promise<void>;
3
+ //# sourceMappingURL=snapshots.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshots.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/snapshots.ts"],"names":[],"mappings":"AAEA,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"}
@@ -0,0 +1,100 @@
1
+ import { buildClient } from '../auth.js';
2
+ import { printResult, printSuccess } from '../output.js';
3
+ export async function snapshotsCmd(args, flags) {
4
+ const sub = args[0];
5
+ switch (sub) {
6
+ case 'create': return snapCreate(args[1], args.slice(2), flags);
7
+ case 'restore': return snapRestore(args[1], flags);
8
+ case 'archives':
9
+ case 'list-archives': return archiveList(args[1], flags);
10
+ case 'create-archive': return archiveCreate(args[1], args.slice(2), flags);
11
+ case 'get-archive': return archiveGet(args[1], args[2], flags);
12
+ case 'delete-archive': return archiveDelete(args[1], args[2], args.slice(3), flags);
13
+ case 'delete-all-archives': return archiveDeleteAll(args[1], args.slice(2), flags);
14
+ default:
15
+ console.log(`
16
+ oblien snapshots — Manage snapshots and archives
17
+
18
+ Usage:
19
+ oblien snapshots create <ws-id> [--after resume|stop] Create snapshot
20
+ oblien snapshots restore <ws-id> Restore from snapshot
21
+ oblien snapshots archives <ws-id> List archives
22
+ oblien snapshots create-archive <ws-id> [--version <v>] Create archive
23
+ oblien snapshots get-archive <ws-id> <version> Get archive info
24
+ oblien snapshots delete-archive <ws-id> <version> Delete archive
25
+ oblien snapshots delete-all-archives <ws-id> Delete all archives
26
+
27
+ Examples:
28
+ oblien snapshots create ws_abc123
29
+ oblien snapshots create ws_abc123 --after stop
30
+ oblien snapshots archives ws_abc123
31
+ oblien snapshots create-archive ws_abc123 --version v1
32
+ `);
33
+ }
34
+ }
35
+ function requireId(id, cmd) {
36
+ if (!id || id.startsWith('-')) {
37
+ console.error(`Usage: oblien snapshots ${cmd} <workspace-id>`);
38
+ process.exit(1);
39
+ }
40
+ return id;
41
+ }
42
+ function parseFlag(args, flag) {
43
+ const idx = args.indexOf(flag);
44
+ return idx >= 0 && idx + 1 < args.length ? args[idx + 1] : undefined;
45
+ }
46
+ async function snapCreate(id, args, flags) {
47
+ const wsId = requireId(id, 'create');
48
+ const client = buildClient(flags);
49
+ const after = parseFlag(args, '--after');
50
+ const res = await client.workspaces.snapshots.create(wsId, after ? { after } : {});
51
+ printResult(res, flags.json);
52
+ }
53
+ async function snapRestore(id, flags) {
54
+ const wsId = requireId(id, 'restore');
55
+ const client = buildClient(flags);
56
+ await client.workspaces.snapshots.restore(wsId);
57
+ printSuccess(`Restored snapshot for ${wsId}`);
58
+ }
59
+ async function archiveList(id, flags) {
60
+ const wsId = requireId(id, 'archives');
61
+ const client = buildClient(flags);
62
+ const res = await client.workspaces.snapshots.listArchives(wsId);
63
+ printResult(res, flags.json);
64
+ }
65
+ async function archiveCreate(id, args, flags) {
66
+ const wsId = requireId(id, 'create-archive');
67
+ const client = buildClient(flags);
68
+ const version = parseFlag(args, '--version');
69
+ const res = await client.workspaces.snapshots.createArchive(wsId, version ? { version } : {});
70
+ printResult(res, flags.json);
71
+ }
72
+ async function archiveGet(id, version, flags) {
73
+ const wsId = requireId(id, 'get-archive');
74
+ if (!version) {
75
+ console.error('Usage: oblien snapshots get-archive <ws-id> <version>');
76
+ process.exit(1);
77
+ }
78
+ const client = buildClient(flags);
79
+ const res = await client.workspaces.snapshots.getArchive(wsId, version);
80
+ printResult(res, flags.json);
81
+ }
82
+ async function archiveDelete(id, version, args, flags) {
83
+ const wsId = requireId(id, 'delete-archive');
84
+ if (!version) {
85
+ console.error('Usage: oblien snapshots delete-archive <ws-id> <version>');
86
+ process.exit(1);
87
+ }
88
+ const client = buildClient(flags);
89
+ const deleteFile = args.includes('--delete-file');
90
+ await client.workspaces.snapshots.deleteArchive(wsId, version, deleteFile ? { delete_file: true } : undefined);
91
+ printSuccess(`Deleted archive ${version} for ${wsId}`);
92
+ }
93
+ async function archiveDeleteAll(id, args, flags) {
94
+ const wsId = requireId(id, 'delete-all-archives');
95
+ const client = buildClient(flags);
96
+ const deleteFiles = args.includes('--delete-files');
97
+ const res = await client.workspaces.snapshots.deleteAllArchives(wsId, deleteFiles ? { delete_files: true } : undefined);
98
+ printResult(res, flags.json);
99
+ }
100
+ //# sourceMappingURL=snapshots.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshots.js","sourceRoot":"","sources":["../../../src/cli/commands/snapshots.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { CliFlags } from './types.js';
2
+ export declare function sshCmd(args: string[], flags: CliFlags): Promise<void>;
3
+ //# sourceMappingURL=ssh.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ssh.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/ssh.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA2B3E"}
@@ -0,0 +1,81 @@
1
+ import { buildClient } from '../auth.js';
2
+ import { printResult, printSuccess } from '../output.js';
3
+ export async function sshCmd(args, flags) {
4
+ const sub = args[0];
5
+ switch (sub) {
6
+ case 'status': return sshStatus(args[1], flags);
7
+ case 'enable': return sshEnable(args[1], flags);
8
+ case 'disable': return sshDisable(args[1], flags);
9
+ case 'set-password': return sshSetPassword(args[1], args.slice(2), flags);
10
+ case 'set-key': return sshSetKey(args[1], args.slice(2), flags);
11
+ default:
12
+ console.log(`
13
+ oblien ssh — Manage SSH access
14
+
15
+ Usage:
16
+ oblien ssh status <ws-id> Check SSH status
17
+ oblien ssh enable <ws-id> Enable SSH
18
+ oblien ssh disable <ws-id> Disable SSH
19
+ oblien ssh set-password <ws-id> --password <p> Set SSH password
20
+ oblien ssh set-key <ws-id> --key <public-key> Set SSH public key
21
+
22
+ Examples:
23
+ oblien ssh status ws_abc123
24
+ oblien ssh enable ws_abc123
25
+ oblien ssh set-password ws_abc123 --password mysecret
26
+ oblien ssh set-key ws_abc123 --key "ssh-ed25519 AAAA..."
27
+ `);
28
+ }
29
+ }
30
+ function requireId(id, cmd) {
31
+ if (!id || id.startsWith('-')) {
32
+ console.error(`Usage: oblien ssh ${cmd} <workspace-id>`);
33
+ process.exit(1);
34
+ }
35
+ return id;
36
+ }
37
+ function parseFlag(args, flag) {
38
+ const idx = args.indexOf(flag);
39
+ return idx >= 0 && idx + 1 < args.length ? args[idx + 1] : undefined;
40
+ }
41
+ async function sshStatus(id, flags) {
42
+ const wsId = requireId(id, 'status');
43
+ const client = buildClient(flags);
44
+ const res = await client.workspaces.ssh.status(wsId);
45
+ printResult(res, flags.json);
46
+ }
47
+ async function sshEnable(id, flags) {
48
+ const wsId = requireId(id, 'enable');
49
+ const client = buildClient(flags);
50
+ await client.workspaces.ssh.enable(wsId);
51
+ printSuccess(`SSH enabled for ${wsId}`);
52
+ }
53
+ async function sshDisable(id, flags) {
54
+ const wsId = requireId(id, 'disable');
55
+ const client = buildClient(flags);
56
+ await client.workspaces.ssh.disable(wsId);
57
+ printSuccess(`SSH disabled for ${wsId}`);
58
+ }
59
+ async function sshSetPassword(id, args, flags) {
60
+ const wsId = requireId(id, 'set-password');
61
+ const password = parseFlag(args, '--password');
62
+ if (!password) {
63
+ console.error('Usage: oblien ssh set-password <ws-id> --password <password>');
64
+ process.exit(1);
65
+ }
66
+ const client = buildClient(flags);
67
+ await client.workspaces.ssh.setPassword(wsId, { password });
68
+ printSuccess(`SSH password set for ${wsId}`);
69
+ }
70
+ async function sshSetKey(id, args, flags) {
71
+ const wsId = requireId(id, 'set-key');
72
+ const key = parseFlag(args, '--key');
73
+ if (!key) {
74
+ console.error('Usage: oblien ssh set-key <ws-id> --key <public-key>');
75
+ process.exit(1);
76
+ }
77
+ const client = buildClient(flags);
78
+ await client.workspaces.ssh.setKey(wsId, { public_key: key });
79
+ printSuccess(`SSH public key set for ${wsId}`);
80
+ }
81
+ //# sourceMappingURL=ssh.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ssh.js","sourceRoot":"","sources":["../../../src/cli/commands/ssh.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { CliFlags } from './types.js';
2
+ export declare function terminalCmd(args: string[], flags: CliFlags): Promise<void>;
3
+ //# sourceMappingURL=terminal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/terminal.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA2BhF"}
@@ -0,0 +1,109 @@
1
+ import { buildClient } from '../auth.js';
2
+ import { printResult, printSuccess, printTable } from '../output.js';
3
+ export async function terminalCmd(args, flags) {
4
+ const sub = args[0];
5
+ switch (sub) {
6
+ case 'create': return termCreate(args[1], args.slice(2), flags);
7
+ case 'list':
8
+ case 'ls': return termList(args[1], flags);
9
+ case 'close': return termClose(args[1], args[2], flags);
10
+ case 'scrollback': return termScrollback(args[1], args[2], args.slice(3), flags);
11
+ default:
12
+ console.log(`
13
+ oblien terminal — Manage runtime terminal sessions
14
+
15
+ Usage:
16
+ oblien terminal create <ws-id> [--shell <sh>] [--cols <n>] [--rows <n>]
17
+ oblien terminal list <ws-id> List sessions
18
+ oblien terminal close <ws-id> <session> Close session
19
+ oblien terminal scrollback <ws-id> <session> [--bytes <n>]
20
+
21
+ Examples:
22
+ oblien terminal create ws_abc123
23
+ oblien terminal create ws_abc123 --shell /bin/bash --cols 120 --rows 40
24
+ oblien terminal list ws_abc123
25
+ oblien terminal close ws_abc123 sess_def456
26
+ oblien terminal scrollback ws_abc123 sess_def456 --bytes 4096
27
+ `);
28
+ }
29
+ }
30
+ function requireWsId(id, cmd) {
31
+ if (!id || id.startsWith('-')) {
32
+ console.error(`Usage: oblien terminal ${cmd} <workspace-id>`);
33
+ process.exit(1);
34
+ }
35
+ return id;
36
+ }
37
+ function parseFlag(args, flag) {
38
+ const idx = args.indexOf(flag);
39
+ return idx >= 0 && idx + 1 < args.length ? args[idx + 1] : undefined;
40
+ }
41
+ async function termCreate(wsIdRaw, args, flags) {
42
+ const wsId = requireWsId(wsIdRaw, 'create');
43
+ const client = buildClient(flags);
44
+ const rt = await client.workspaces.runtime(wsId);
45
+ const params = {};
46
+ const shell = parseFlag(args, '--shell');
47
+ const cols = parseFlag(args, '--cols');
48
+ const rows = parseFlag(args, '--rows');
49
+ if (shell)
50
+ params.shell = shell;
51
+ if (cols)
52
+ params.cols = Number(cols);
53
+ if (rows)
54
+ params.rows = Number(rows);
55
+ const res = await rt.terminal.create(params);
56
+ printResult(res, flags.json);
57
+ }
58
+ async function termList(wsIdRaw, flags) {
59
+ const wsId = requireWsId(wsIdRaw, 'list');
60
+ const client = buildClient(flags);
61
+ const rt = await client.workspaces.runtime(wsId);
62
+ const res = await rt.terminal.list();
63
+ if (flags.json) {
64
+ printResult(res, true);
65
+ }
66
+ else {
67
+ const items = Array.isArray(res) ? res : [];
68
+ if (items.length === 0) {
69
+ console.log('No terminal sessions.');
70
+ }
71
+ else {
72
+ const rows = items.map((s) => ({
73
+ id: s.id ?? s.terminal_id ?? '-',
74
+ shell: s.shell ?? '-',
75
+ status: s.status ?? '-',
76
+ }));
77
+ printTable(rows, ['id', 'shell', 'status']);
78
+ }
79
+ }
80
+ }
81
+ async function termClose(wsIdRaw, sessionId, flags) {
82
+ const wsId = requireWsId(wsIdRaw, 'close');
83
+ if (!sessionId) {
84
+ console.error('Usage: oblien terminal close <ws-id> <session-id>');
85
+ process.exit(1);
86
+ }
87
+ const client = buildClient(flags);
88
+ const rt = await client.workspaces.runtime(wsId);
89
+ await rt.terminal.close(sessionId);
90
+ printSuccess(`Closed terminal ${sessionId}`);
91
+ }
92
+ async function termScrollback(wsIdRaw, sessionId, args, flags) {
93
+ const wsId = requireWsId(wsIdRaw, 'scrollback');
94
+ if (!sessionId) {
95
+ console.error('Usage: oblien terminal scrollback <ws-id> <session-id>');
96
+ process.exit(1);
97
+ }
98
+ const client = buildClient(flags);
99
+ const rt = await client.workspaces.runtime(wsId);
100
+ const bytes = parseFlag(args, '--bytes');
101
+ const res = await rt.terminal.scrollback(sessionId, bytes ? { bytes: Number(bytes) } : undefined);
102
+ if (flags.json) {
103
+ printResult(res, true);
104
+ }
105
+ else {
106
+ process.stdout.write(res.data ?? res.content ?? JSON.stringify(res));
107
+ }
108
+ }
109
+ //# sourceMappingURL=terminal.js.map