@rool-dev/cli 0.1.9 → 0.1.10-dev.4204061
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 +50 -16
- package/dist/app.d.ts +3 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +160 -0
- package/dist/app.js.map +1 -0
- package/dist/chat.d.ts +2 -1
- package/dist/chat.d.ts.map +1 -1
- package/dist/chat.js +52 -35
- package/dist/chat.js.map +1 -1
- package/dist/client.d.ts +5 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +16 -0
- package/dist/client.js.map +1 -0
- package/dist/constants.d.ts +5 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +8 -0
- package/dist/constants.js.map +1 -0
- package/dist/format.d.ts +1 -0
- package/dist/format.d.ts.map +1 -1
- package/dist/format.js +7 -0
- package/dist/format.js.map +1 -1
- package/dist/index.js +4 -52
- package/dist/index.js.map +1 -1
- package/dist/logout.d.ts +2 -1
- package/dist/logout.d.ts.map +1 -1
- package/dist/logout.js +26 -22
- package/dist/logout.js.map +1 -1
- package/dist/media.d.ts +2 -1
- package/dist/media.d.ts.map +1 -1
- package/dist/media.js +69 -98
- package/dist/media.js.map +1 -1
- package/dist/program.d.ts +3 -0
- package/dist/program.d.ts.map +1 -0
- package/dist/program.js +23 -0
- package/dist/program.js.map +1 -0
- package/dist/space.d.ts +2 -1
- package/dist/space.d.ts.map +1 -1
- package/dist/space.js +94 -98
- package/dist/space.js.map +1 -1
- package/dist/user.d.ts +2 -1
- package/dist/user.d.ts.map +1 -1
- package/dist/user.js +28 -25
- package/dist/user.js.map +1 -1
- package/package.json +5 -2
- package/dist/args.d.ts +0 -12
- package/dist/args.d.ts.map +0 -1
- package/dist/args.js +0 -49
- package/dist/args.js.map +0 -1
- package/dist/publish.d.ts +0 -2
- package/dist/publish.d.ts.map +0 -1
- package/dist/publish.js +0 -195
- package/dist/publish.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Rool CLI
|
|
2
2
|
|
|
3
|
-
Command-line interface for the [Rool](https://
|
|
3
|
+
Command-line interface for the [Rool](https://rool.dev) platform.
|
|
4
4
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
@@ -18,24 +18,36 @@ rool <command> [options]
|
|
|
18
18
|
|
|
19
19
|
| Command | Description |
|
|
20
20
|
|---------|-------------|
|
|
21
|
-
| `chat
|
|
22
|
-
| `
|
|
23
|
-
| `media upload <file>` | Upload a file and create an object with the media URL |
|
|
21
|
+
| `chat [prompt]` | Chat with a space (interactive if no prompt) |
|
|
22
|
+
| `media upload <file>` | Upload a file to a space and create an object with the media URL |
|
|
24
23
|
| `space list` | List all spaces |
|
|
25
24
|
| `space create <name>` | Create a new space |
|
|
26
25
|
| `space delete <name>` | Delete a space |
|
|
26
|
+
| `app publish <app-id> <path>` | Publish a directory as an app |
|
|
27
|
+
| `app list` | List published apps |
|
|
28
|
+
| `app unpublish <app-id>` | Unpublish an app |
|
|
29
|
+
| `app slug [new-slug]` | Show or set your user slug |
|
|
27
30
|
| `user` | Show current user info |
|
|
28
31
|
| `logout` | Log out |
|
|
29
32
|
|
|
30
|
-
### Options
|
|
33
|
+
### Global Options
|
|
31
34
|
|
|
32
35
|
| Option | Description |
|
|
33
36
|
|--------|-------------|
|
|
34
|
-
| `-
|
|
35
|
-
| `-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
| `-V, --version` | Show version number |
|
|
38
|
+
| `-h, --help` | Show help for any command |
|
|
39
|
+
|
|
40
|
+
### Command Options
|
|
41
|
+
|
|
42
|
+
| Option | Description | Default | Used by |
|
|
43
|
+
|--------|-------------|---------|---------|
|
|
44
|
+
| `-s, --space <name>` | space name | `Rool CLI` | `chat`, `media upload` |
|
|
45
|
+
| `-c, --conversation <id>` | conversation ID | `rool-dev` | `chat` |
|
|
46
|
+
| `-u, --url <url>` | API URL | `https://api.rool.dev` | all |
|
|
47
|
+
| `-m, --message <text>` | optional comment/description | | `media upload` |
|
|
48
|
+
| `-y, --yes` | skip confirmation prompt | | `space delete` |
|
|
49
|
+
| `-n, --name <name>` | app display name (defaults to app-id) | | `app publish` |
|
|
50
|
+
| `--no-spa` | disable SPA routing (404s will not serve index.html) | | `app publish` |
|
|
39
51
|
|
|
40
52
|
### Examples
|
|
41
53
|
|
|
@@ -49,6 +61,15 @@ rool chat
|
|
|
49
61
|
# Use a specific space
|
|
50
62
|
rool chat -s "My Project" "Summarize the current state"
|
|
51
63
|
|
|
64
|
+
# Upload a file
|
|
65
|
+
rool media upload photo.jpg
|
|
66
|
+
|
|
67
|
+
# Upload with a comment
|
|
68
|
+
rool media upload report.pdf -m "Q4 sales report"
|
|
69
|
+
|
|
70
|
+
# Upload to a specific space
|
|
71
|
+
rool media upload logo.png -s "My Project"
|
|
72
|
+
|
|
52
73
|
# List your spaces
|
|
53
74
|
rool space list
|
|
54
75
|
|
|
@@ -61,14 +82,23 @@ rool space delete "Old Project"
|
|
|
61
82
|
# Delete without confirmation
|
|
62
83
|
rool space delete "Old Project" -y
|
|
63
84
|
|
|
64
|
-
#
|
|
65
|
-
rool
|
|
85
|
+
# Publish a directory as an app
|
|
86
|
+
rool app publish my-app ./dist
|
|
66
87
|
|
|
67
|
-
#
|
|
68
|
-
rool
|
|
88
|
+
# Publish with a custom name
|
|
89
|
+
rool app publish my-app ./dist -n "My App"
|
|
69
90
|
|
|
70
|
-
#
|
|
71
|
-
rool
|
|
91
|
+
# List published apps
|
|
92
|
+
rool app list
|
|
93
|
+
|
|
94
|
+
# Unpublish an app
|
|
95
|
+
rool app unpublish my-app
|
|
96
|
+
|
|
97
|
+
# Show your user slug
|
|
98
|
+
rool app slug
|
|
99
|
+
|
|
100
|
+
# Set your user slug
|
|
101
|
+
rool app slug my-slug
|
|
72
102
|
|
|
73
103
|
# Show user info
|
|
74
104
|
rool user
|
|
@@ -81,6 +111,10 @@ rool logout
|
|
|
81
111
|
|
|
82
112
|
On first use, the CLI opens your browser to authenticate. Credentials are stored in `~/.config/rool/`.
|
|
83
113
|
|
|
114
|
+
## Version
|
|
115
|
+
|
|
116
|
+
Current version: `0.1.10`. Use `rool --version` to check your installed version.
|
|
117
|
+
|
|
84
118
|
## License
|
|
85
119
|
|
|
86
120
|
MIT - see [LICENSE](../../LICENSE) for details.
|
package/dist/app.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAmBzC,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmJlD"}
|
package/dist/app.js
ADDED
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import * as fs from 'node:fs';
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
import archiver from 'archiver';
|
|
4
|
+
import { getClient } from './client.js';
|
|
5
|
+
import { formatBytes } from './format.js';
|
|
6
|
+
import { DEFAULT_API_URL } from './constants.js';
|
|
7
|
+
async function zipDirectory(dirPath) {
|
|
8
|
+
return new Promise((resolve, reject) => {
|
|
9
|
+
const archive = archiver('zip', { zlib: { level: 9 } });
|
|
10
|
+
const chunks = [];
|
|
11
|
+
archive.on('data', (chunk) => chunks.push(chunk));
|
|
12
|
+
archive.on('end', () => resolve(Buffer.concat(chunks)));
|
|
13
|
+
archive.on('error', reject);
|
|
14
|
+
archive.directory(dirPath, false);
|
|
15
|
+
archive.finalize();
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
export function registerApp(program) {
|
|
19
|
+
const app = program
|
|
20
|
+
.command('app')
|
|
21
|
+
.description('Publish and manage apps');
|
|
22
|
+
app
|
|
23
|
+
.command('publish')
|
|
24
|
+
.description('Publish a directory as an app')
|
|
25
|
+
.argument('<app-id>', 'unique app identifier')
|
|
26
|
+
.argument('<path>', 'directory to publish')
|
|
27
|
+
.option('-n, --name <name>', 'app display name (defaults to app-id)')
|
|
28
|
+
.option('--no-spa', 'disable SPA routing (404s will not serve index.html)')
|
|
29
|
+
.option('-u, --url <url>', 'API URL', DEFAULT_API_URL)
|
|
30
|
+
.addHelpText('after', `
|
|
31
|
+
Examples:
|
|
32
|
+
# Publish a directory as an app
|
|
33
|
+
$ rool app publish my-app ./dist
|
|
34
|
+
|
|
35
|
+
# Publish with a custom name
|
|
36
|
+
$ rool app publish my-app ./dist -n "My App"`)
|
|
37
|
+
.action(async (appId, dirPath, opts) => {
|
|
38
|
+
// Validate directory exists
|
|
39
|
+
const resolvedPath = path.resolve(dirPath);
|
|
40
|
+
if (!fs.existsSync(resolvedPath)) {
|
|
41
|
+
console.error(`Directory not found: ${resolvedPath}`);
|
|
42
|
+
process.exit(1);
|
|
43
|
+
}
|
|
44
|
+
const stat = fs.statSync(resolvedPath);
|
|
45
|
+
if (!stat.isDirectory()) {
|
|
46
|
+
console.error(`Not a directory: ${resolvedPath}`);
|
|
47
|
+
process.exit(1);
|
|
48
|
+
}
|
|
49
|
+
// Check for index.html
|
|
50
|
+
const indexPath = path.join(resolvedPath, 'index.html');
|
|
51
|
+
if (!fs.existsSync(indexPath)) {
|
|
52
|
+
console.error(`No index.html found in ${resolvedPath}`);
|
|
53
|
+
console.error('The directory must contain an index.html file at the root.');
|
|
54
|
+
process.exit(1);
|
|
55
|
+
}
|
|
56
|
+
console.log(`Packaging ${resolvedPath}...`);
|
|
57
|
+
const zipBuffer = await zipDirectory(resolvedPath);
|
|
58
|
+
console.log(`Bundle size: ${formatBytes(zipBuffer.length)}`);
|
|
59
|
+
const client = await getClient(opts.url);
|
|
60
|
+
try {
|
|
61
|
+
console.log(`Publishing ${appId}...`);
|
|
62
|
+
const blob = new Blob([new Uint8Array(zipBuffer)], { type: 'application/zip' });
|
|
63
|
+
const result = await client.publishApp(appId, { name: opts.name ?? appId, bundle: blob, spa: opts.spa });
|
|
64
|
+
console.log('');
|
|
65
|
+
console.log(`Published: ${result.name}`);
|
|
66
|
+
console.log(`URL: ${result.url}`);
|
|
67
|
+
console.log(`Size: ${formatBytes(result.sizeBytes)}`);
|
|
68
|
+
console.log(`SPA routing: ${result.spa ? 'enabled' : 'disabled'}`);
|
|
69
|
+
}
|
|
70
|
+
finally {
|
|
71
|
+
client.destroy();
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
app
|
|
75
|
+
.command('list')
|
|
76
|
+
.description('List published apps')
|
|
77
|
+
.option('-u, --url <url>', 'API URL', DEFAULT_API_URL)
|
|
78
|
+
.addHelpText('after', `
|
|
79
|
+
Examples:
|
|
80
|
+
# List published apps
|
|
81
|
+
$ rool app list`)
|
|
82
|
+
.action(async (opts) => {
|
|
83
|
+
const client = await getClient(opts.url);
|
|
84
|
+
try {
|
|
85
|
+
const apps = await client.listApps();
|
|
86
|
+
if (apps.length === 0) {
|
|
87
|
+
console.log('No published apps.');
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
console.log('Published apps:');
|
|
91
|
+
console.log('');
|
|
92
|
+
for (const a of apps) {
|
|
93
|
+
console.log(` ${a.appId}`);
|
|
94
|
+
console.log(` Name: ${a.name}`);
|
|
95
|
+
console.log(` URL: ${a.url}`);
|
|
96
|
+
console.log(` Size: ${formatBytes(a.sizeBytes)}`);
|
|
97
|
+
console.log(` SPA: ${a.spa ? 'yes' : 'no'}`);
|
|
98
|
+
console.log(` Updated: ${new Date(a.updatedAt).toLocaleString()}`);
|
|
99
|
+
console.log('');
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
finally {
|
|
104
|
+
client.destroy();
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
app
|
|
108
|
+
.command('unpublish')
|
|
109
|
+
.description('Unpublish an app')
|
|
110
|
+
.argument('<app-id>', 'app to unpublish')
|
|
111
|
+
.option('-u, --url <url>', 'API URL', DEFAULT_API_URL)
|
|
112
|
+
.addHelpText('after', `
|
|
113
|
+
Examples:
|
|
114
|
+
# Unpublish an app
|
|
115
|
+
$ rool app unpublish my-app`)
|
|
116
|
+
.action(async (appId, opts) => {
|
|
117
|
+
const client = await getClient(opts.url);
|
|
118
|
+
try {
|
|
119
|
+
const a = await client.getAppInfo(appId);
|
|
120
|
+
if (!a) {
|
|
121
|
+
console.error(`App not found: ${appId}`);
|
|
122
|
+
process.exit(1);
|
|
123
|
+
}
|
|
124
|
+
await client.unpublishApp(appId);
|
|
125
|
+
console.log(`Unpublished: ${appId}`);
|
|
126
|
+
}
|
|
127
|
+
finally {
|
|
128
|
+
client.destroy();
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
app
|
|
132
|
+
.command('slug')
|
|
133
|
+
.description('Show or set your user slug')
|
|
134
|
+
.argument('[new-slug]', 'new slug to set')
|
|
135
|
+
.option('-u, --url <url>', 'API URL', DEFAULT_API_URL)
|
|
136
|
+
.addHelpText('after', `
|
|
137
|
+
Examples:
|
|
138
|
+
# Show your user slug
|
|
139
|
+
$ rool app slug
|
|
140
|
+
|
|
141
|
+
# Set your user slug
|
|
142
|
+
$ rool app slug my-slug`)
|
|
143
|
+
.action(async (newSlug, opts) => {
|
|
144
|
+
const client = await getClient(opts.url);
|
|
145
|
+
try {
|
|
146
|
+
const user = await client.getCurrentUser();
|
|
147
|
+
if (newSlug) {
|
|
148
|
+
await client.setSlug(newSlug);
|
|
149
|
+
console.log(`Slug updated to: ${newSlug}`);
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
console.log(`Your slug: ${user.slug}`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
finally {
|
|
156
|
+
client.destroy();
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=app.js.map
|
package/dist/app.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
|
package/dist/chat.d.ts
CHANGED
package/dist/chat.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../src/chat.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../src/chat.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAMzC,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8CnD"}
|
package/dist/chat.js
CHANGED
|
@@ -1,42 +1,59 @@
|
|
|
1
1
|
import * as readline from 'node:readline';
|
|
2
|
-
import {
|
|
3
|
-
import { NodeAuthProvider } from '@rool-dev/sdk/node';
|
|
4
|
-
import { parseArgs } from './args.js';
|
|
2
|
+
import { getClient } from './client.js';
|
|
5
3
|
import { formatMarkdown } from './format.js';
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
4
|
+
import { DEFAULT_API_URL, DEFAULT_SPACE_NAME, DEFAULT_CONVERSATION_ID } from './constants.js';
|
|
5
|
+
export function registerChat(program) {
|
|
6
|
+
program
|
|
7
|
+
.command('chat')
|
|
8
|
+
.description('Chat with a space (interactive if no prompt)')
|
|
9
|
+
.argument('[prompt...]', 'prompt to send')
|
|
10
|
+
.option('-s, --space <name>', 'space name', DEFAULT_SPACE_NAME)
|
|
11
|
+
.option('-c, --conversation <id>', 'conversation ID', DEFAULT_CONVERSATION_ID)
|
|
12
|
+
.option('-u, --url <url>', 'API URL', DEFAULT_API_URL)
|
|
13
|
+
.addHelpText('after', `
|
|
14
|
+
Examples:
|
|
15
|
+
# Chat with the default space
|
|
16
|
+
$ rool chat "What is the capital of France?"
|
|
17
|
+
|
|
18
|
+
# Interactive chat mode
|
|
19
|
+
$ rool chat
|
|
20
|
+
|
|
21
|
+
# Use a specific space
|
|
22
|
+
$ rool chat -s "My Project" "Summarize the current state"`)
|
|
23
|
+
.action(async (promptWords, opts) => {
|
|
24
|
+
const prompt = promptWords.join(' ');
|
|
25
|
+
const client = await getClient(opts.url);
|
|
26
|
+
// Find or create space by name
|
|
27
|
+
const spaces = await client.listSpaces();
|
|
28
|
+
const spaceInfo = spaces.find(s => s.name === opts.space);
|
|
29
|
+
let space;
|
|
30
|
+
if (spaceInfo) {
|
|
31
|
+
space = await client.openSpace(spaceInfo.id, { conversationId: opts.conversation });
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
space = await client.createSpace(opts.space, { conversationId: opts.conversation });
|
|
35
|
+
}
|
|
36
|
+
if (prompt) {
|
|
37
|
+
// One-shot mode
|
|
38
|
+
try {
|
|
39
|
+
await sendPrompt(space, prompt);
|
|
40
|
+
}
|
|
41
|
+
finally {
|
|
42
|
+
space.close();
|
|
43
|
+
client.destroy();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
// Interactive mode
|
|
48
|
+
await interactiveMode(space, client);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
36
51
|
}
|
|
37
52
|
function clearStatusLine() {
|
|
38
|
-
process.stdout.
|
|
39
|
-
|
|
53
|
+
if (process.stdout.isTTY) {
|
|
54
|
+
process.stdout.clearLine(0);
|
|
55
|
+
process.stdout.cursorTo(0);
|
|
56
|
+
}
|
|
40
57
|
}
|
|
41
58
|
async function sendPrompt(space, prompt) {
|
|
42
59
|
// Subscribe to progress updates
|
package/dist/chat.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.js","sourceRoot":"","sources":["../src/chat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"chat.js","sourceRoot":"","sources":["../src/chat.ts"],"names":[],"mappings":"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"}
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAK3C,wBAAsB,SAAS,CAC7B,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAChC,OAAO,CAAC,UAAU,CAAC,CAarB"}
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { RoolClient } from '@rool-dev/sdk';
|
|
2
|
+
import { NodeAuthProvider } from '@rool-dev/sdk/node';
|
|
3
|
+
const APP_NAME = 'Rool CLI';
|
|
4
|
+
export async function getClient(apiUrl, options) {
|
|
5
|
+
const authProvider = new NodeAuthProvider();
|
|
6
|
+
const client = new RoolClient({ baseUrl: apiUrl, authProvider });
|
|
7
|
+
if (!await client.isAuthenticated()) {
|
|
8
|
+
if (options?.autoLogin === false) {
|
|
9
|
+
return client;
|
|
10
|
+
}
|
|
11
|
+
console.log('Opening browser to authenticate...');
|
|
12
|
+
await client.login(APP_NAME);
|
|
13
|
+
}
|
|
14
|
+
return client;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,MAAM,QAAQ,GAAG,UAAU,CAAC;AAE5B,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,MAAc,EACd,OAAiC;IAEjC,MAAM,YAAY,GAAG,IAAI,gBAAgB,EAAE,CAAC;IAC5C,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;IAEjE,IAAI,CAAC,MAAM,MAAM,CAAC,eAAe,EAAE,EAAE,CAAC;QACpC,IAAI,OAAO,EAAE,SAAS,KAAK,KAAK,EAAE,CAAC;YACjC,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;QAClD,MAAM,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,OAAO,QAAc,CAAC;AACnC,eAAO,MAAM,eAAe,yBAAyB,CAAC;AACtD,eAAO,MAAM,kBAAkB,aAAa,CAAC;AAC7C,eAAO,MAAM,uBAAuB,aAAa,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';
|
|
2
|
+
const require = createRequire(import.meta.url);
|
|
3
|
+
const pkg = require('../package.json');
|
|
4
|
+
export const VERSION = pkg.version;
|
|
5
|
+
export const DEFAULT_API_URL = 'https://api.rool.dev';
|
|
6
|
+
export const DEFAULT_SPACE_NAME = 'Rool CLI';
|
|
7
|
+
export const DEFAULT_CONVERSATION_ID = 'rool-dev';
|
|
8
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAC;AAE9D,MAAM,CAAC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;AACnC,MAAM,CAAC,MAAM,eAAe,GAAG,sBAAsB,CAAC;AACtD,MAAM,CAAC,MAAM,kBAAkB,GAAG,UAAU,CAAC;AAC7C,MAAM,CAAC,MAAM,uBAAuB,GAAG,UAAU,CAAC"}
|
package/dist/format.d.ts
CHANGED
package/dist/format.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAKA,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD"}
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAKA,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIjD"}
|
package/dist/format.js
CHANGED
|
@@ -4,4 +4,11 @@ marked.use(markedTerminal());
|
|
|
4
4
|
export function formatMarkdown(text) {
|
|
5
5
|
return marked.parse(text);
|
|
6
6
|
}
|
|
7
|
+
export function formatBytes(bytes) {
|
|
8
|
+
if (bytes < 1024)
|
|
9
|
+
return `${bytes} B`;
|
|
10
|
+
if (bytes < 1024 * 1024)
|
|
11
|
+
return `${(bytes / 1024).toFixed(1)} KB`;
|
|
12
|
+
return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
|
|
13
|
+
}
|
|
7
14
|
//# sourceMappingURL=format.js.map
|
package/dist/format.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.js","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAwB,MAAM,QAAQ,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,CAAC,GAAG,CAAC,cAAc,EAAqB,CAAC,CAAC;AAEhD,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAW,CAAC;AACtC,CAAC"}
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAwB,MAAM,QAAQ,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,CAAC,GAAG,CAAC,cAAc,EAAqB,CAAC,CAAC;AAEhD,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAW,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,IAAI,KAAK,GAAG,IAAI;QAAE,OAAO,GAAG,KAAK,IAAI,CAAC;IACtC,IAAI,KAAK,GAAG,IAAI,GAAG,IAAI;QAAE,OAAO,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IAClE,OAAO,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;AACpD,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,56 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
import { user } from './user.js';
|
|
7
|
-
import { logout } from './logout.js';
|
|
8
|
-
import { printCommonOptions } from './args.js';
|
|
9
|
-
function printUsage() {
|
|
10
|
-
console.error('Usage: rool <command> [options]');
|
|
11
|
-
console.error('');
|
|
12
|
-
console.error('Commands:');
|
|
13
|
-
console.error(' chat [prompt] Chat with a space (interactive if no prompt)');
|
|
14
|
-
console.error(' media upload <file> Upload a file to a space');
|
|
15
|
-
console.error(' space <subcommand> Manage spaces (list, create, delete)');
|
|
16
|
-
console.error(' publish <subcommand> Publish apps (list, unpublish, slug)');
|
|
17
|
-
console.error(' user Show current user info');
|
|
18
|
-
console.error(' logout Log out');
|
|
19
|
-
console.error('');
|
|
20
|
-
printCommonOptions();
|
|
21
|
-
}
|
|
22
|
-
async function main() {
|
|
23
|
-
const [command, ...args] = process.argv.slice(2);
|
|
24
|
-
switch (command) {
|
|
25
|
-
case 'chat':
|
|
26
|
-
await chat(args);
|
|
27
|
-
break;
|
|
28
|
-
case 'media':
|
|
29
|
-
await media(args);
|
|
30
|
-
break;
|
|
31
|
-
case 'space':
|
|
32
|
-
await space(args);
|
|
33
|
-
break;
|
|
34
|
-
case 'spaces':
|
|
35
|
-
// Alias: "rool spaces" = "rool space list"
|
|
36
|
-
await space(['list', ...args]);
|
|
37
|
-
break;
|
|
38
|
-
case 'publish':
|
|
39
|
-
await publish(args);
|
|
40
|
-
break;
|
|
41
|
-
case 'user':
|
|
42
|
-
await user(args);
|
|
43
|
-
break;
|
|
44
|
-
case 'logout':
|
|
45
|
-
await logout(args);
|
|
46
|
-
break;
|
|
47
|
-
default:
|
|
48
|
-
printUsage();
|
|
49
|
-
process.exit(1);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
main().catch(err => {
|
|
53
|
-
console.error(err.message);
|
|
2
|
+
import { createProgram } from './program.js';
|
|
3
|
+
const program = createProgram();
|
|
4
|
+
program.parseAsync().catch(err => {
|
|
5
|
+
console.error(err instanceof Error ? err.message : err);
|
|
54
6
|
process.exit(1);
|
|
55
7
|
});
|
|
56
8
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;AAEhC,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;IAC/B,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/dist/logout.d.ts
CHANGED
package/dist/logout.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../src/logout.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../src/logout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsBrD"}
|