@rool-dev/cli 0.1.9-dev.ffef516 → 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.
Files changed (52) hide show
  1. package/README.md +50 -16
  2. package/dist/app.d.ts +3 -0
  3. package/dist/app.d.ts.map +1 -0
  4. package/dist/app.js +160 -0
  5. package/dist/app.js.map +1 -0
  6. package/dist/chat.d.ts +2 -1
  7. package/dist/chat.d.ts.map +1 -1
  8. package/dist/chat.js +52 -35
  9. package/dist/chat.js.map +1 -1
  10. package/dist/client.d.ts +5 -0
  11. package/dist/client.d.ts.map +1 -0
  12. package/dist/client.js +16 -0
  13. package/dist/client.js.map +1 -0
  14. package/dist/constants.d.ts +5 -0
  15. package/dist/constants.d.ts.map +1 -0
  16. package/dist/constants.js +8 -0
  17. package/dist/constants.js.map +1 -0
  18. package/dist/format.d.ts +1 -0
  19. package/dist/format.d.ts.map +1 -1
  20. package/dist/format.js +7 -0
  21. package/dist/format.js.map +1 -1
  22. package/dist/index.js +4 -52
  23. package/dist/index.js.map +1 -1
  24. package/dist/logout.d.ts +2 -1
  25. package/dist/logout.d.ts.map +1 -1
  26. package/dist/logout.js +26 -22
  27. package/dist/logout.js.map +1 -1
  28. package/dist/media.d.ts +2 -1
  29. package/dist/media.d.ts.map +1 -1
  30. package/dist/media.js +69 -98
  31. package/dist/media.js.map +1 -1
  32. package/dist/program.d.ts +3 -0
  33. package/dist/program.d.ts.map +1 -0
  34. package/dist/program.js +23 -0
  35. package/dist/program.js.map +1 -0
  36. package/dist/space.d.ts +2 -1
  37. package/dist/space.d.ts.map +1 -1
  38. package/dist/space.js +94 -98
  39. package/dist/space.js.map +1 -1
  40. package/dist/user.d.ts +2 -1
  41. package/dist/user.d.ts.map +1 -1
  42. package/dist/user.js +28 -25
  43. package/dist/user.js.map +1 -1
  44. package/package.json +5 -2
  45. package/dist/args.d.ts +0 -12
  46. package/dist/args.d.ts.map +0 -1
  47. package/dist/args.js +0 -49
  48. package/dist/args.js.map +0 -1
  49. package/dist/publish.d.ts +0 -2
  50. package/dist/publish.d.ts.map +0 -1
  51. package/dist/publish.js +0 -195
  52. 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://api.rool.dev) platform.
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 <prompt>` | Send a prompt to a space |
22
- | `chat` | Interactive chat mode |
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
- | `-s, --space <name>` | Space name (default: "Rool CLI") |
35
- | `-c, --conversation <id>` | Conversation ID (default: "rool-dev") |
36
- | `-u, --url <url>` | API URL (default: https://api.rool.dev) |
37
- | `-m, --message <text>` | Comment/description (for media upload) |
38
- | `-y, --yes` | Skip confirmation prompts |
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
- # Upload a file
65
- rool media upload photo.jpg
85
+ # Publish a directory as an app
86
+ rool app publish my-app ./dist
66
87
 
67
- # Upload with a comment
68
- rool media upload report.pdf -m "Q4 sales report"
88
+ # Publish with a custom name
89
+ rool app publish my-app ./dist -n "My App"
69
90
 
70
- # Upload to a specific space
71
- rool media upload logo.png -s "My Project"
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,3 @@
1
+ import { type Command } from 'commander';
2
+ export declare function registerApp(program: Command): void;
3
+ //# sourceMappingURL=app.d.ts.map
@@ -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
@@ -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
@@ -1,2 +1,3 @@
1
- export declare function chat(args: string[]): Promise<void>;
1
+ import { type Command } from 'commander';
2
+ export declare function registerChat(program: Command): void;
2
3
  //# sourceMappingURL=chat.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../src/chat.ts"],"names":[],"mappings":"AAMA,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAiCxD"}
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 { RoolClient } from '@rool-dev/sdk';
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
- export async function chat(args) {
7
- const { space: spaceName, conversation: conversationId, url: apiUrl, rest } = parseArgs(args);
8
- const prompt = rest.join(' ');
9
- const authProvider = new NodeAuthProvider();
10
- const client = new RoolClient({ baseUrl: apiUrl, authProvider });
11
- // Login if needed (NodeAuthProvider opens browser and awaits callback)
12
- if (!await client.isAuthenticated()) {
13
- console.log('Opening browser to authenticate...');
14
- await client.login("Rool CLI");
15
- }
16
- // Find or create space by name
17
- const spaces = await client.listSpaces();
18
- const spaceInfo = spaces.find(s => s.name === spaceName);
19
- let space;
20
- if (spaceInfo) {
21
- space = await client.openSpace(spaceInfo.id, { conversationId });
22
- }
23
- else {
24
- space = await client.createSpace(spaceName, { conversationId });
25
- }
26
- if (prompt) {
27
- // One-shot mode
28
- await sendPrompt(space, prompt);
29
- space.close();
30
- client.destroy();
31
- }
32
- else {
33
- // Interactive mode
34
- await interactiveMode(space, client);
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.clearLine(0);
39
- process.stdout.cursorTo(0);
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":"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"}
1
+ {"version":3,"file":"chat.js","sourceRoot":"","sources":["../src/chat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { RoolClient } from '@rool-dev/sdk';
2
+ export declare function getClient(apiUrl: string, options?: {
3
+ autoLogin?: boolean;
4
+ }): Promise<RoolClient>;
5
+ //# sourceMappingURL=client.d.ts.map
@@ -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,5 @@
1
+ export declare const VERSION: string;
2
+ export declare const DEFAULT_API_URL = "https://api.rool.dev";
3
+ export declare const DEFAULT_SPACE_NAME = "Rool CLI";
4
+ export declare const DEFAULT_CONVERSATION_ID = "rool-dev";
5
+ //# sourceMappingURL=constants.d.ts.map
@@ -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
@@ -1,2 +1,3 @@
1
1
  export declare function formatMarkdown(text: string): string;
2
+ export declare function formatBytes(bytes: number): string;
2
3
  //# sourceMappingURL=format.d.ts.map
@@ -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
@@ -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 { chat } from './chat.js';
3
- import { media } from './media.js';
4
- import { space } from './space.js';
5
- import { publish } from './publish.js';
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,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAE/C,SAAS,UAAU;IACjB,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACjD,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAClB,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC3B,OAAO,CAAC,KAAK,CAAC,qEAAqE,CAAC,CAAC;IACrF,OAAO,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACjE,OAAO,CAAC,KAAK,CAAC,6DAA6D,CAAC,CAAC;IAC7E,OAAO,CAAC,KAAK,CAAC,6DAA6D,CAAC,CAAC;IAC7E,OAAO,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;IAC/D,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;IAChD,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAClB,kBAAkB,EAAE,CAAC;AACvB,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEjD,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,MAAM;YACT,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;YACjB,MAAM;QACR,KAAK,OAAO;YACV,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;YAClB,MAAM;QACR,KAAK,OAAO;YACV,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;YAClB,MAAM;QACR,KAAK,QAAQ;YACX,2CAA2C;YAC3C,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;YAC/B,MAAM;QACR,KAAK,SAAS;YACZ,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;YACpB,MAAM;QACR,KAAK,MAAM;YACT,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;YACjB,MAAM;QACR,KAAK,QAAQ;YACX,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;YACnB,MAAM;QACR;YACE,UAAU,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;IACjB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC3B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
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
@@ -1,2 +1,3 @@
1
- export declare function logout(args: string[]): Promise<void>;
1
+ import { type Command } from 'commander';
2
+ export declare function registerLogout(program: Command): void;
2
3
  //# sourceMappingURL=logout.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../src/logout.ts"],"names":[],"mappings":"AAIA,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsB1D"}
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"}