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.
- package/README.md +634 -0
- package/dist/cli/auth.d.ts +13 -0
- package/dist/cli/auth.d.ts.map +1 -0
- package/dist/cli/auth.js +30 -0
- package/dist/cli/auth.js.map +1 -0
- package/dist/cli/commands/api-access.d.ts +3 -0
- package/dist/cli/commands/api-access.d.ts.map +1 -0
- package/dist/cli/commands/api-access.js +87 -0
- package/dist/cli/commands/api-access.js.map +1 -0
- package/dist/cli/commands/config.d.ts +3 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/config.js +63 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/exec.d.ts +3 -0
- package/dist/cli/commands/exec.d.ts.map +1 -0
- package/dist/cli/commands/exec.js +173 -0
- package/dist/cli/commands/exec.js.map +1 -0
- package/dist/cli/commands/files.d.ts +3 -0
- package/dist/cli/commands/files.d.ts.map +1 -0
- package/dist/cli/commands/files.js +168 -0
- package/dist/cli/commands/files.js.map +1 -0
- package/dist/cli/commands/images.d.ts +3 -0
- package/dist/cli/commands/images.d.ts.map +1 -0
- package/dist/cli/commands/images.js +43 -0
- package/dist/cli/commands/images.js.map +1 -0
- package/dist/cli/commands/lifecycle.d.ts +3 -0
- package/dist/cli/commands/lifecycle.d.ts.map +1 -0
- package/dist/cli/commands/lifecycle.js +88 -0
- package/dist/cli/commands/lifecycle.js.map +1 -0
- package/dist/cli/commands/logs.d.ts +3 -0
- package/dist/cli/commands/logs.d.ts.map +1 -0
- package/dist/cli/commands/logs.js +104 -0
- package/dist/cli/commands/logs.js.map +1 -0
- package/dist/cli/commands/metadata.d.ts +3 -0
- package/dist/cli/commands/metadata.d.ts.map +1 -0
- package/dist/cli/commands/metadata.js +73 -0
- package/dist/cli/commands/metadata.js.map +1 -0
- package/dist/cli/commands/metrics.d.ts +3 -0
- package/dist/cli/commands/metrics.d.ts.map +1 -0
- package/dist/cli/commands/metrics.js +57 -0
- package/dist/cli/commands/metrics.js.map +1 -0
- package/dist/cli/commands/network.d.ts +3 -0
- package/dist/cli/commands/network.d.ts.map +1 -0
- package/dist/cli/commands/network.js +88 -0
- package/dist/cli/commands/network.js.map +1 -0
- package/dist/cli/commands/public-access.d.ts +3 -0
- package/dist/cli/commands/public-access.d.ts.map +1 -0
- package/dist/cli/commands/public-access.js +92 -0
- package/dist/cli/commands/public-access.js.map +1 -0
- package/dist/cli/commands/search.d.ts +3 -0
- package/dist/cli/commands/search.d.ts.map +1 -0
- package/dist/cli/commands/search.js +134 -0
- package/dist/cli/commands/search.js.map +1 -0
- package/dist/cli/commands/skills.d.ts +3 -0
- package/dist/cli/commands/skills.d.ts.map +1 -0
- package/dist/cli/commands/skills.js +156 -0
- package/dist/cli/commands/skills.js.map +1 -0
- package/dist/cli/commands/snapshots.d.ts +3 -0
- package/dist/cli/commands/snapshots.d.ts.map +1 -0
- package/dist/cli/commands/snapshots.js +100 -0
- package/dist/cli/commands/snapshots.js.map +1 -0
- package/dist/cli/commands/ssh.d.ts +3 -0
- package/dist/cli/commands/ssh.d.ts.map +1 -0
- package/dist/cli/commands/ssh.js +81 -0
- package/dist/cli/commands/ssh.js.map +1 -0
- package/dist/cli/commands/terminal.d.ts +3 -0
- package/dist/cli/commands/terminal.d.ts.map +1 -0
- package/dist/cli/commands/terminal.js +109 -0
- package/dist/cli/commands/terminal.js.map +1 -0
- package/dist/cli/commands/types.d.ts +8 -0
- package/dist/cli/commands/types.d.ts.map +1 -0
- package/dist/cli/commands/types.js +2 -0
- package/dist/cli/commands/types.js.map +1 -0
- package/dist/cli/commands/usage.d.ts +3 -0
- package/dist/cli/commands/usage.d.ts.map +1 -0
- package/dist/cli/commands/usage.js +98 -0
- package/dist/cli/commands/usage.js.map +1 -0
- package/dist/cli/commands/watcher.d.ts +3 -0
- package/dist/cli/commands/watcher.d.ts.map +1 -0
- package/dist/cli/commands/watcher.js +108 -0
- package/dist/cli/commands/watcher.js.map +1 -0
- package/dist/cli/commands/workloads.d.ts +3 -0
- package/dist/cli/commands/workloads.d.ts.map +1 -0
- package/dist/cli/commands/workloads.js +232 -0
- package/dist/cli/commands/workloads.js.map +1 -0
- package/dist/cli/commands/workspaces.d.ts +3 -0
- package/dist/cli/commands/workspaces.d.ts.map +1 -0
- package/dist/cli/commands/workspaces.js +255 -0
- package/dist/cli/commands/workspaces.js.map +1 -0
- package/dist/cli/config-store.d.ts +10 -0
- package/dist/cli/config-store.d.ts.map +1 -0
- package/dist/cli/config-store.js +28 -0
- package/dist/cli/config-store.js.map +1 -0
- package/dist/cli/index.d.ts +12 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +199 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/output.d.ts +21 -0
- package/dist/cli/output.d.ts.map +1 -0
- package/dist/cli/output.js +108 -0
- package/dist/cli/output.js.map +1 -0
- 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 @@
|
|
|
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 @@
|
|
|
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":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAGzD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAc,EAAE,KAAe;IAChE,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAEpB,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,QAAQ,CAAC,CAAY,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC3E,KAAK,SAAS,CAAC,CAAW,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC7D,KAAK,UAAU,CAAC;QAChB,KAAK,eAAe,CAAC,CAAK,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC7D,KAAK,gBAAgB,CAAC,CAAI,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC9E,KAAK,aAAa,CAAC,CAAO,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACrE,KAAK,gBAAgB,CAAC,CAAI,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACvF,KAAK,qBAAqB,CAAC,CAAC,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACnF;YACE,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;CAiBjB,CAAC,CAAC;IACD,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,EAAsB,EAAE,GAAW;IACpD,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,KAAK,CAAC,2BAA2B,GAAG,iBAAiB,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,SAAS,CAAC,IAAc,EAAE,IAAY;IAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,OAAO,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACvE,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,EAAsB,EAAE,IAAc,EAAE,KAAe;IAC/E,MAAM,IAAI,GAAG,SAAS,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,EAAE,SAAS,CAA6C,CAAC;IACrF,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACnF,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,EAAsB,EAAE,KAAe;IAChE,MAAM,IAAI,GAAG,SAAS,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,YAAY,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAC;AAChD,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,EAAsB,EAAE,KAAe;IAChE,MAAM,IAAI,GAAG,SAAS,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACjE,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,EAAsB,EAAE,IAAc,EAAE,KAAe;IAClF,MAAM,IAAI,GAAG,SAAS,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAC7C,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC9F,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,EAAsB,EAAE,OAA2B,EAAE,KAAe;IAC5F,MAAM,IAAI,GAAG,SAAS,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;IAC1C,IAAI,CAAC,OAAO,EAAE,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;IAC1G,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACxE,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,EAAsB,EAAE,OAA2B,EAAE,IAAc,EAAE,KAAe;IAC/G,MAAM,IAAI,GAAG,SAAS,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAC7C,IAAI,CAAC,OAAO,EAAE,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;IAC7G,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IAClD,MAAM,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC/G,YAAY,CAAC,mBAAmB,OAAO,QAAQ,IAAI,EAAE,CAAC,CAAC;AACzD,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,EAAsB,EAAE,IAAc,EAAE,KAAe;IACrF,MAAM,IAAI,GAAG,SAAS,CAAC,EAAE,EAAE,qBAAqB,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IACpD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,iBAAiB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACxH,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC"}
|
|
@@ -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 @@
|
|
|
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
|