@rool-dev/cli 0.1.4 → 0.1.5-dev.21656e2

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 CHANGED
@@ -20,6 +20,7 @@ rool <command> [options]
20
20
  |---------|-------------|
21
21
  | `chat <prompt>` | Send a prompt to a space |
22
22
  | `chat` | Interactive chat mode |
23
+ | `media upload <file>` | Upload a file and create an object with the media URL |
23
24
  | `space list` | List all spaces |
24
25
  | `space create <name>` | Create a new space |
25
26
  | `space delete <name>` | Delete a space |
@@ -33,6 +34,7 @@ rool <command> [options]
33
34
  | `-s, --space <name>` | Space name (default: "Rool CLI") |
34
35
  | `-c, --conversation <id>` | Conversation ID (default: "rool-dev") |
35
36
  | `-u, --url <url>` | API URL (default: https://api.rool.dev) |
37
+ | `-m, --message <text>` | Comment/description (for media upload) |
36
38
  | `-y, --yes` | Skip confirmation prompts |
37
39
 
38
40
  ### Examples
@@ -59,6 +61,15 @@ rool space delete "Old Project"
59
61
  # Delete without confirmation
60
62
  rool space delete "Old Project" -y
61
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
+
62
73
  # Show user info
63
74
  rool user
64
75
 
package/dist/args.d.ts CHANGED
@@ -2,6 +2,7 @@ export interface CommonArgs {
2
2
  space: string;
3
3
  conversation: string;
4
4
  url: string;
5
+ message: string | undefined;
5
6
  }
6
7
  export interface ParsedArgs extends CommonArgs {
7
8
  rest: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,UAAW,SAAQ,UAAU;IAC5C,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAWD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CA4BpD;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAKzC"}
1
+ {"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B;AAED,MAAM,WAAW,UAAW,SAAQ,UAAU;IAC5C,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAaD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CA6BpD;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAKzC"}
package/dist/args.js CHANGED
@@ -8,12 +8,15 @@ const FLAG_ALIASES = {
8
8
  '--conversation': 'conversation',
9
9
  '-u': 'url',
10
10
  '--url': 'url',
11
+ '-m': 'message',
12
+ '--message': 'message',
11
13
  };
12
14
  export function parseArgs(args) {
13
15
  const result = {
14
16
  space: DEFAULT_SPACE_NAME,
15
17
  conversation: DEFAULT_CONVERSATION_ID,
16
18
  url: DEFAULT_API_URL,
19
+ message: undefined,
17
20
  rest: [],
18
21
  };
19
22
  for (let i = 0; i < args.length; i++) {
package/dist/args.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"args.js","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"AAAA,MAAM,eAAe,GAAG,sBAAsB,CAAC;AAC/C,MAAM,kBAAkB,GAAG,UAAU,CAAC;AACtC,MAAM,uBAAuB,GAAG,UAAU,CAAC;AAY3C,MAAM,YAAY,GAAqC;IACrD,IAAI,EAAE,OAAO;IACb,SAAS,EAAE,OAAO;IAClB,IAAI,EAAE,cAAc;IACpB,gBAAgB,EAAE,cAAc;IAChC,IAAI,EAAE,KAAK;IACX,OAAO,EAAE,KAAK;CACf,CAAC;AAEF,MAAM,UAAU,SAAS,CAAC,IAAc;IACtC,MAAM,MAAM,GAAe;QACzB,KAAK,EAAE,kBAAkB;QACzB,YAAY,EAAE,uBAAuB;QACrC,GAAG,EAAE,eAAe;QACpB,IAAI,EAAE,EAAE;KACT,CAAC;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;QAE9B,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACxB,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpC,OAAO,CAAC,KAAK,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAC;gBAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACtB,CAAC;aAAM,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,KAAK,CAAC,mBAAmB,GAAG,EAAE,CAAC,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC1B,OAAO,CAAC,KAAK,CAAC,sDAAsD,kBAAkB,IAAI,CAAC,CAAC;IAC5F,OAAO,CAAC,KAAK,CAAC,2DAA2D,uBAAuB,IAAI,CAAC,CAAC;IACtG,OAAO,CAAC,KAAK,CAAC,kDAAkD,eAAe,GAAG,CAAC,CAAC;AACtF,CAAC"}
1
+ {"version":3,"file":"args.js","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"AAAA,MAAM,eAAe,GAAG,sBAAsB,CAAC;AAC/C,MAAM,kBAAkB,GAAG,UAAU,CAAC;AACtC,MAAM,uBAAuB,GAAG,UAAU,CAAC;AAa3C,MAAM,YAAY,GAAqC;IACrD,IAAI,EAAE,OAAO;IACb,SAAS,EAAE,OAAO;IAClB,IAAI,EAAE,cAAc;IACpB,gBAAgB,EAAE,cAAc;IAChC,IAAI,EAAE,KAAK;IACX,OAAO,EAAE,KAAK;IACd,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,SAAS;CACvB,CAAC;AAEF,MAAM,UAAU,SAAS,CAAC,IAAc;IACtC,MAAM,MAAM,GAAe;QACzB,KAAK,EAAE,kBAAkB;QACzB,YAAY,EAAE,uBAAuB;QACrC,GAAG,EAAE,eAAe;QACpB,OAAO,EAAE,SAAS;QAClB,IAAI,EAAE,EAAE;KACT,CAAC;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;QAE9B,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACxB,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpC,OAAO,CAAC,KAAK,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAC;gBAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACtB,CAAC;aAAM,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,KAAK,CAAC,mBAAmB,GAAG,EAAE,CAAC,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC1B,OAAO,CAAC,KAAK,CAAC,sDAAsD,kBAAkB,IAAI,CAAC,CAAC;IAC5F,OAAO,CAAC,KAAK,CAAC,2DAA2D,uBAAuB,IAAI,CAAC,CAAC;IACtG,OAAO,CAAC,KAAK,CAAC,kDAAkD,eAAe,GAAG,CAAC,CAAC;AACtF,CAAC"}
package/dist/chat.js CHANGED
@@ -48,7 +48,7 @@ async function sendPrompt(space, prompt) {
48
48
  clearStatusLine();
49
49
  process.stdout.write(tool ? `[${tool.name}]` : 'Thinking...');
50
50
  };
51
- space.on('interactionsUpdated', onUpdate);
51
+ space.on('conversationUpdated', onUpdate);
52
52
  try {
53
53
  const result = await space.prompt(prompt);
54
54
  clearStatusLine();
@@ -59,7 +59,7 @@ async function sendPrompt(space, prompt) {
59
59
  throw err;
60
60
  }
61
61
  finally {
62
- space.off('interactionsUpdated', onUpdate);
62
+ space.off('conversationUpdated', onUpdate);
63
63
  }
64
64
  }
65
65
  async function interactiveMode(space, client) {
package/dist/index.js CHANGED
@@ -1,6 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import { chat } from './chat.js';
3
+ import { media } from './media.js';
3
4
  import { space } from './space.js';
5
+ import { publish } from './publish.js';
4
6
  import { user } from './user.js';
5
7
  import { logout } from './logout.js';
6
8
  import { printCommonOptions } from './args.js';
@@ -9,7 +11,9 @@ function printUsage() {
9
11
  console.error('');
10
12
  console.error('Commands:');
11
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');
12
15
  console.error(' space <subcommand> Manage spaces (list, create, delete)');
16
+ console.error(' publish <subcommand> Publish apps (list, unpublish, slug)');
13
17
  console.error(' user Show current user info');
14
18
  console.error(' logout Log out');
15
19
  console.error('');
@@ -21,6 +25,9 @@ async function main() {
21
25
  case 'chat':
22
26
  await chat(args);
23
27
  break;
28
+ case 'media':
29
+ await media(args);
30
+ break;
24
31
  case 'space':
25
32
  await space(args);
26
33
  break;
@@ -28,6 +35,9 @@ async function main() {
28
35
  // Alias: "rool spaces" = "rool space list"
29
36
  await space(['list', ...args]);
30
37
  break;
38
+ case 'publish':
39
+ await publish(args);
40
+ break;
31
41
  case 'user':
32
42
  await user(args);
33
43
  break;
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,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,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,QAAQ;YACX,2CAA2C;YAC3C,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;YAC/B,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,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"}
@@ -0,0 +1,2 @@
1
+ export declare function media(args: string[]): Promise<void>;
2
+ //# sourceMappingURL=media.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../src/media.ts"],"names":[],"mappings":"AAqHA,wBAAsB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CASzD"}
package/dist/media.js ADDED
@@ -0,0 +1,112 @@
1
+ import { execSync } from 'node:child_process';
2
+ import * as fs from 'node:fs';
3
+ import * as path from 'node:path';
4
+ import { RoolClient } from '@rool-dev/client';
5
+ import { NodeAuthProvider } from '@rool-dev/client/node';
6
+ import { parseArgs, printCommonOptions } from './args.js';
7
+ function getContentType(filePath) {
8
+ try {
9
+ return execSync(`file --mime-type -b "${filePath}"`, { encoding: 'utf-8' }).trim();
10
+ }
11
+ catch {
12
+ return 'application/octet-stream';
13
+ }
14
+ }
15
+ function formatSize(bytes) {
16
+ if (bytes < 1024)
17
+ return `${bytes} B`;
18
+ if (bytes < 1024 * 1024)
19
+ return `${(bytes / 1024).toFixed(1)} KB`;
20
+ return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
21
+ }
22
+ function printUsage() {
23
+ console.error('Usage: rool media upload <file> [options]');
24
+ console.error('');
25
+ console.error('Upload a file to a space and create an object with the media URL.');
26
+ console.error('');
27
+ console.error('Options:');
28
+ console.error(' -m, --message <text> Optional comment/description');
29
+ printCommonOptions();
30
+ console.error('');
31
+ console.error('Examples:');
32
+ console.error(' rool media upload photo.jpg');
33
+ console.error(' rool media upload report.pdf -m "Q4 sales report"');
34
+ console.error(' rool media upload logo.png -s "My Project"');
35
+ }
36
+ async function getClient(apiUrl) {
37
+ const authProvider = new NodeAuthProvider();
38
+ const client = new RoolClient({ baseUrl: apiUrl, authProvider });
39
+ if (!await client.isAuthenticated()) {
40
+ console.log('Opening browser to authenticate...');
41
+ await client.login('Rool CLI');
42
+ }
43
+ return client;
44
+ }
45
+ async function getSpace(client, spaceName) {
46
+ const spaces = await client.listSpaces();
47
+ const spaceInfo = spaces.find(s => s.name === spaceName);
48
+ if (spaceInfo) {
49
+ return client.openSpace(spaceInfo.id);
50
+ }
51
+ else {
52
+ return client.createSpace(spaceName);
53
+ }
54
+ }
55
+ async function uploadMedia(args) {
56
+ const { space: spaceName, url: apiUrl, message, rest } = parseArgs(args);
57
+ const filePath = rest[0];
58
+ if (!filePath) {
59
+ printUsage();
60
+ process.exit(1);
61
+ }
62
+ if (!fs.existsSync(filePath)) {
63
+ console.error(`File not found: ${filePath}`);
64
+ process.exit(1);
65
+ }
66
+ const stats = fs.statSync(filePath);
67
+ if (!stats.isFile()) {
68
+ console.error(`Not a file: ${filePath}`);
69
+ process.exit(1);
70
+ }
71
+ const filename = path.basename(filePath);
72
+ const contentType = getContentType(filePath);
73
+ const size = stats.size;
74
+ const client = await getClient(apiUrl);
75
+ const space = await getSpace(client, spaceName);
76
+ try {
77
+ const fileBuffer = fs.readFileSync(filePath);
78
+ const blob = new Blob([fileBuffer], { type: contentType });
79
+ console.log(`Uploading ${filename} (${formatSize(size)})...`);
80
+ const url = await space.uploadMedia(blob);
81
+ const objectData = {
82
+ type: 'file',
83
+ url,
84
+ filename,
85
+ contentType,
86
+ size,
87
+ uploadedAt: new Date().toISOString(),
88
+ };
89
+ if (message) {
90
+ objectData.comment = message;
91
+ }
92
+ const { object } = await space.createObject({ data: objectData });
93
+ console.log(`Uploaded: ${filename} (${formatSize(size)})`);
94
+ console.log(`Created object: ${object.id}`);
95
+ console.log(`URL: ${url}`);
96
+ }
97
+ finally {
98
+ space.close();
99
+ client.destroy();
100
+ }
101
+ }
102
+ export async function media(args) {
103
+ const [subcommand, ...subargs] = args;
104
+ if (subcommand === 'upload') {
105
+ await uploadMedia(subargs);
106
+ }
107
+ else {
108
+ printUsage();
109
+ process.exit(1);
110
+ }
111
+ }
112
+ //# sourceMappingURL=media.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media.js","sourceRoot":"","sources":["../src/media.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function publish(args: string[]): Promise<void>;
2
+ //# sourceMappingURL=publish.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../src/publish.ts"],"names":[],"mappings":"AAiKA,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAmE3D"}
@@ -0,0 +1,195 @@
1
+ import * as fs from 'node:fs';
2
+ import * as path from 'node:path';
3
+ import archiver from 'archiver';
4
+ import { RoolClient } from '@rool-dev/client';
5
+ import { NodeAuthProvider } from '@rool-dev/client/node';
6
+ import { parseArgs } from './args.js';
7
+ function printUsage() {
8
+ console.error('Usage: rool publish <command> [options]');
9
+ console.error('');
10
+ console.error('Commands:');
11
+ console.error(' <app-id> <path> Publish a directory as an app');
12
+ console.error(' list List published apps');
13
+ console.error(' unpublish <app-id> Unpublish an app');
14
+ console.error(' slug [new-slug] Show or set your user slug');
15
+ console.error('');
16
+ console.error('Options:');
17
+ console.error(' -n, --name <name> App display name (defaults to app-id)');
18
+ console.error(' --no-spa Disable SPA routing (404s won\'t serve index.html)');
19
+ console.error(' -u, --url <url> API URL (default: https://api.rool.dev)');
20
+ console.error('');
21
+ console.error('Examples:');
22
+ console.error(' rool publish my-app ./dist');
23
+ console.error(' rool publish my-app ./dist -n "My App"');
24
+ console.error(' rool publish list');
25
+ console.error(' rool publish unpublish my-app');
26
+ }
27
+ async function getClient(apiUrl) {
28
+ const authProvider = new NodeAuthProvider();
29
+ const client = new RoolClient({ baseUrl: apiUrl, authProvider });
30
+ if (!await client.isAuthenticated()) {
31
+ console.log('Opening browser to authenticate...');
32
+ await client.login("Rool CLI");
33
+ }
34
+ return client;
35
+ }
36
+ async function zipDirectory(dirPath) {
37
+ return new Promise((resolve, reject) => {
38
+ const archive = archiver('zip', { zlib: { level: 9 } });
39
+ const chunks = [];
40
+ archive.on('data', (chunk) => chunks.push(chunk));
41
+ archive.on('end', () => resolve(Buffer.concat(chunks)));
42
+ archive.on('error', reject);
43
+ archive.directory(dirPath, false);
44
+ archive.finalize();
45
+ });
46
+ }
47
+ function formatBytes(bytes) {
48
+ if (bytes < 1024)
49
+ return `${bytes} B`;
50
+ if (bytes < 1024 * 1024)
51
+ return `${(bytes / 1024).toFixed(1)} KB`;
52
+ return `${(bytes / (1024 * 1024)).toFixed(2)} MB`;
53
+ }
54
+ async function publishApp(apiUrl, appId, dirPath, name, spa) {
55
+ // Validate directory exists
56
+ const resolvedPath = path.resolve(dirPath);
57
+ if (!fs.existsSync(resolvedPath)) {
58
+ console.error(`Directory not found: ${resolvedPath}`);
59
+ process.exit(1);
60
+ }
61
+ const stat = fs.statSync(resolvedPath);
62
+ if (!stat.isDirectory()) {
63
+ console.error(`Not a directory: ${resolvedPath}`);
64
+ process.exit(1);
65
+ }
66
+ // Check for index.html
67
+ const indexPath = path.join(resolvedPath, 'index.html');
68
+ if (!fs.existsSync(indexPath)) {
69
+ console.error(`No index.html found in ${resolvedPath}`);
70
+ console.error('The directory must contain an index.html file at the root.');
71
+ process.exit(1);
72
+ }
73
+ console.log(`Packaging ${resolvedPath}...`);
74
+ const zipBuffer = await zipDirectory(resolvedPath);
75
+ console.log(`Bundle size: ${formatBytes(zipBuffer.length)}`);
76
+ const client = await getClient(apiUrl);
77
+ console.log(`Publishing ${appId}...`);
78
+ const blob = new Blob([new Uint8Array(zipBuffer)], { type: 'application/zip' });
79
+ const result = await client.publishApp(appId, { name, bundle: blob, spa });
80
+ console.log('');
81
+ console.log(`Published: ${result.name}`);
82
+ console.log(`URL: ${result.url}`);
83
+ console.log(`Size: ${formatBytes(result.sizeBytes)}`);
84
+ console.log(`SPA routing: ${result.spa ? 'enabled' : 'disabled'}`);
85
+ client.destroy();
86
+ }
87
+ async function listApps(apiUrl) {
88
+ const client = await getClient(apiUrl);
89
+ const apps = await client.listApps();
90
+ if (apps.length === 0) {
91
+ console.log('No published apps.');
92
+ }
93
+ else {
94
+ console.log('Published apps:');
95
+ console.log('');
96
+ for (const app of apps) {
97
+ console.log(` ${app.appId}`);
98
+ console.log(` Name: ${app.name}`);
99
+ console.log(` URL: ${app.url}`);
100
+ console.log(` Size: ${formatBytes(app.sizeBytes)}`);
101
+ console.log(` SPA: ${app.spa ? 'yes' : 'no'}`);
102
+ console.log(` Updated: ${new Date(app.updatedAt).toLocaleString()}`);
103
+ console.log('');
104
+ }
105
+ }
106
+ client.destroy();
107
+ }
108
+ async function unpublishApp(apiUrl, appId) {
109
+ const client = await getClient(apiUrl);
110
+ // Check if app exists
111
+ const app = await client.getAppInfo(appId);
112
+ if (!app) {
113
+ console.error(`App not found: ${appId}`);
114
+ client.destroy();
115
+ process.exit(1);
116
+ }
117
+ await client.unpublishApp(appId);
118
+ console.log(`Unpublished: ${appId}`);
119
+ client.destroy();
120
+ }
121
+ async function showOrSetSlug(apiUrl, newSlug) {
122
+ const client = await getClient(apiUrl);
123
+ const user = await client.getCurrentUser();
124
+ if (newSlug) {
125
+ await client.setSlug(newSlug);
126
+ console.log(`Slug updated to: ${newSlug}`);
127
+ }
128
+ else {
129
+ console.log(`Your slug: ${user.slug}`);
130
+ }
131
+ client.destroy();
132
+ }
133
+ export async function publish(args) {
134
+ const { url: apiUrl, rest } = parseArgs(args);
135
+ const [subcommand, ...subargs] = rest;
136
+ // Parse additional flags from subargs
137
+ let name;
138
+ let spa = true;
139
+ const positional = [];
140
+ for (let i = 0; i < subargs.length; i++) {
141
+ const arg = subargs[i];
142
+ if (arg === '-n' || arg === '--name') {
143
+ name = subargs[++i];
144
+ if (!name) {
145
+ console.error('Missing value for --name');
146
+ process.exit(1);
147
+ }
148
+ }
149
+ else if (arg === '--no-spa') {
150
+ spa = false;
151
+ }
152
+ else if (arg.startsWith('-')) {
153
+ console.error(`Unknown option: ${arg}`);
154
+ process.exit(1);
155
+ }
156
+ else {
157
+ positional.push(arg);
158
+ }
159
+ }
160
+ switch (subcommand) {
161
+ case 'list':
162
+ await listApps(apiUrl);
163
+ break;
164
+ case 'unpublish': {
165
+ const appId = positional[0];
166
+ if (!appId) {
167
+ console.error('Usage: rool publish unpublish <app-id>');
168
+ process.exit(1);
169
+ }
170
+ await unpublishApp(apiUrl, appId);
171
+ break;
172
+ }
173
+ case 'slug': {
174
+ const newSlug = positional[0];
175
+ await showOrSetSlug(apiUrl, newSlug);
176
+ break;
177
+ }
178
+ case undefined:
179
+ printUsage();
180
+ process.exit(1);
181
+ break;
182
+ default: {
183
+ // Treat as: rool publish <app-id> <path>
184
+ const appId = subcommand;
185
+ const dirPath = positional[0];
186
+ if (!dirPath) {
187
+ console.error('Usage: rool publish <app-id> <path>');
188
+ process.exit(1);
189
+ }
190
+ await publishApp(apiUrl, appId, dirPath, name ?? appId, spa);
191
+ break;
192
+ }
193
+ }
194
+ }
195
+ //# sourceMappingURL=publish.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.js","sourceRoot":"","sources":["../src/publish.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rool-dev/cli",
3
- "version": "0.1.4",
3
+ "version": "0.1.5-dev.21656e2",
4
4
  "description": "Command-line interface for the Rool platform",
5
5
  "packageManager": "pnpm@10.17.1",
6
6
  "type": "module",
@@ -39,11 +39,13 @@
39
39
  },
40
40
  "license": "UNLICENSED",
41
41
  "dependencies": {
42
- "@rool-dev/client": "^0.8.3",
42
+ "@rool-dev/client": "^0.8.6",
43
+ "archiver": "^7.0.1",
43
44
  "marked": "^15.0.12",
44
45
  "marked-terminal": "^7.3.0"
45
46
  },
46
47
  "devDependencies": {
48
+ "@types/archiver": "^7.0.0",
47
49
  "@types/marked-terminal": "^6.1.1",
48
50
  "@types/node": "^25.0.2",
49
51
  "typescript": "^5.9.3"