@rool-dev/cli 0.1.10 → 0.1.11-dev.f460594

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 (46) hide show
  1. package/README.md +26 -12
  2. package/dist/app.d.ts.map +1 -1
  3. package/dist/app.js +22 -0
  4. package/dist/app.js.map +1 -1
  5. package/dist/chat.d.ts.map +1 -1
  6. package/dist/chat.js +10 -0
  7. package/dist/chat.js.map +1 -1
  8. package/dist/create.d.ts +3 -0
  9. package/dist/create.d.ts.map +1 -0
  10. package/dist/create.js +119 -0
  11. package/dist/create.js.map +1 -0
  12. package/dist/logout.d.ts.map +1 -1
  13. package/dist/logout.js +4 -0
  14. package/dist/logout.js.map +1 -1
  15. package/dist/media.d.ts.map +1 -1
  16. package/dist/media.js +10 -0
  17. package/dist/media.js.map +1 -1
  18. package/dist/program.d.ts.map +1 -1
  19. package/dist/program.js +2 -0
  20. package/dist/program.js.map +1 -1
  21. package/dist/space.d.ts.map +1 -1
  22. package/dist/space.js +15 -0
  23. package/dist/space.js.map +1 -1
  24. package/dist/user.d.ts.map +1 -1
  25. package/dist/user.js +4 -0
  26. package/dist/user.js.map +1 -1
  27. package/package.json +4 -3
  28. package/templates/svelte/AGENTS.md +57 -0
  29. package/templates/svelte/index.html +12 -0
  30. package/templates/svelte/package.json +25 -0
  31. package/templates/svelte/src/App.svelte +54 -0
  32. package/templates/svelte/src/Chat.svelte +92 -0
  33. package/templates/svelte/src/Header.svelte +26 -0
  34. package/templates/svelte/src/Objects.svelte +39 -0
  35. package/templates/svelte/src/Splash.svelte +21 -0
  36. package/templates/svelte/src/app.css +1 -0
  37. package/templates/svelte/src/main.ts +5 -0
  38. package/templates/svelte/tsconfig.json +13 -0
  39. package/templates/svelte/vite.config.ts +8 -0
  40. package/templates/vanilla/AGENTS.md +63 -0
  41. package/templates/vanilla/index.html +12 -0
  42. package/templates/vanilla/package.json +21 -0
  43. package/templates/vanilla/src/app.css +1 -0
  44. package/templates/vanilla/src/main.ts +158 -0
  45. package/templates/vanilla/tsconfig.json +10 -0
  46. package/templates/vanilla/vite.config.ts +7 -0
package/README.md CHANGED
@@ -19,6 +19,7 @@ rool <command> [options]
19
19
  | Command | Description |
20
20
  |---------|-------------|
21
21
  | `chat [prompt]` | Chat with a space (interactive if no prompt) |
22
+ | `create <name>` | Create a new Rool app |
22
23
  | `media upload <file>` | Upload a file to a space and create an object with the media URL |
23
24
  | `space list` | List all spaces |
24
25
  | `space create <name>` | Create a new space |
@@ -43,7 +44,9 @@ rool <command> [options]
43
44
  |--------|-------------|---------|---------|
44
45
  | `-s, --space <name>` | space name | `Rool CLI` | `chat`, `media upload` |
45
46
  | `-c, --conversation <id>` | conversation ID | `rool-dev` | `chat` |
46
- | `-u, --url <url>` | API URL | `https://api.rool.dev` | all |
47
+ | `-u, --url <url>` | API URL | `https://api.rool.dev` | `chat`, `media upload`, `space list`, `space create`, `space delete`, `app publish`, `app list`, `app unpublish`, `app slug`, `user`, `logout` |
48
+ | `--svelte` | use Svelte template | | `create` |
49
+ | `--vanilla` | use vanilla TypeScript template | | `create` |
47
50
  | `-m, --message <text>` | optional comment/description | | `media upload` |
48
51
  | `-y, --yes` | skip confirmation prompt | | `space delete` |
49
52
  | `-n, --name <name>` | app display name (defaults to app-id) | | `app publish` |
@@ -61,17 +64,14 @@ rool chat
61
64
  # Use a specific space
62
65
  rool chat -s "My Project" "Summarize the current state"
63
66
 
64
- # List your spaces
65
- rool space list
67
+ # Create a Svelte app
68
+ rool create --svelte my-app
66
69
 
67
- # Create a new space
68
- rool space create "My New Project"
70
+ # Create a vanilla TypeScript app
71
+ rool create --vanilla my-app
69
72
 
70
- # Delete a space (with confirmation)
71
- rool space delete "Old Project"
72
-
73
- # Delete without confirmation
74
- rool space delete "Old Project" -y
73
+ # Using npx
74
+ npx @rool-dev/cli create --svelte my-app
75
75
 
76
76
  # Upload a file
77
77
  rool media upload photo.jpg
@@ -82,6 +82,18 @@ rool media upload report.pdf -m "Q4 sales report"
82
82
  # Upload to a specific space
83
83
  rool media upload logo.png -s "My Project"
84
84
 
85
+ # List your spaces
86
+ rool space list
87
+
88
+ # Create a new space
89
+ rool space create "My New Project"
90
+
91
+ # Delete a space (with confirmation)
92
+ rool space delete "Old Project"
93
+
94
+ # Delete without confirmation
95
+ rool space delete "Old Project" -y
96
+
85
97
  # Publish a directory as an app
86
98
  rool app publish my-app ./dist
87
99
 
@@ -94,8 +106,10 @@ rool app list
94
106
  # Unpublish an app
95
107
  rool app unpublish my-app
96
108
 
97
- # Show or set your user slug
109
+ # Show your user slug
98
110
  rool app slug
111
+
112
+ # Set your user slug
99
113
  rool app slug my-slug
100
114
 
101
115
  # Show user info
@@ -111,7 +125,7 @@ On first use, the CLI opens your browser to authenticate. Credentials are stored
111
125
 
112
126
  ## Version
113
127
 
114
- Current version: `0.1.9`. Use `rool --version` to check your installed version.
128
+ Current version: `0.1.11`. Use `rool --version` to check your installed version.
115
129
 
116
130
  ## License
117
131
 
package/dist/app.d.ts.map CHANGED
@@ -1 +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,CA6HlD"}
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 CHANGED
@@ -27,6 +27,13 @@ export function registerApp(program) {
27
27
  .option('-n, --name <name>', 'app display name (defaults to app-id)')
28
28
  .option('--no-spa', 'disable SPA routing (404s will not serve index.html)')
29
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"`)
30
37
  .action(async (appId, dirPath, opts) => {
31
38
  // Validate directory exists
32
39
  const resolvedPath = path.resolve(dirPath);
@@ -68,6 +75,10 @@ export function registerApp(program) {
68
75
  .command('list')
69
76
  .description('List published apps')
70
77
  .option('-u, --url <url>', 'API URL', DEFAULT_API_URL)
78
+ .addHelpText('after', `
79
+ Examples:
80
+ # List published apps
81
+ $ rool app list`)
71
82
  .action(async (opts) => {
72
83
  const client = await getClient(opts.url);
73
84
  try {
@@ -98,6 +109,10 @@ export function registerApp(program) {
98
109
  .description('Unpublish an app')
99
110
  .argument('<app-id>', 'app to unpublish')
100
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`)
101
116
  .action(async (appId, opts) => {
102
117
  const client = await getClient(opts.url);
103
118
  try {
@@ -118,6 +133,13 @@ export function registerApp(program) {
118
133
  .description('Show or set your user slug')
119
134
  .argument('[new-slug]', 'new slug to set')
120
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`)
121
143
  .action(async (newSlug, opts) => {
122
144
  const client = await getClient(opts.url);
123
145
  try {
package/dist/app.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
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,CAoCnD"}
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
@@ -10,6 +10,16 @@ export function registerChat(program) {
10
10
  .option('-s, --space <name>', 'space name', DEFAULT_SPACE_NAME)
11
11
  .option('-c, --conversation <id>', 'conversation ID', DEFAULT_CONVERSATION_ID)
12
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"`)
13
23
  .action(async (promptWords, opts) => {
14
24
  const prompt = promptWords.join(' ');
15
25
  const client = await getClient(opts.url);
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,3 @@
1
+ import { type Command } from 'commander';
2
+ export declare function registerCreate(program: Command): void;
3
+ //# sourceMappingURL=create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAsDzC,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6ErD"}
package/dist/create.js ADDED
@@ -0,0 +1,119 @@
1
+ import * as fs from 'node:fs';
2
+ import * as path from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
5
+ function getTemplatesDir() {
6
+ // In development: packages/cli/src -> packages/cli/templates
7
+ // In production: packages/cli/dist -> packages/cli/templates
8
+ return path.resolve(__dirname, '..', 'templates');
9
+ }
10
+ const SKIP_DIRS = new Set(['node_modules', '.git', 'dist']);
11
+ function copyDir(src, dest, replacements) {
12
+ fs.mkdirSync(dest, { recursive: true });
13
+ for (const entry of fs.readdirSync(src, { withFileTypes: true })) {
14
+ const srcPath = path.join(src, entry.name);
15
+ const destPath = path.join(dest, entry.name);
16
+ if (entry.isDirectory()) {
17
+ if (!SKIP_DIRS.has(entry.name)) {
18
+ copyDir(srcPath, destPath, replacements);
19
+ }
20
+ }
21
+ else {
22
+ let content = fs.readFileSync(srcPath, 'utf-8');
23
+ for (const [from, to] of replacements) {
24
+ content = content.replaceAll(from, to);
25
+ }
26
+ fs.writeFileSync(destPath, content);
27
+ }
28
+ }
29
+ }
30
+ function toValidPackageName(name) {
31
+ return name
32
+ .toLowerCase()
33
+ .replace(/\s+/g, '-')
34
+ .replace(/[^a-z0-9-_]/g, '');
35
+ }
36
+ function toTitleCase(name) {
37
+ return name
38
+ .split(/[-_\s]+/)
39
+ .map(word => word.charAt(0).toUpperCase() + word.slice(1))
40
+ .join(' ');
41
+ }
42
+ export function registerCreate(program) {
43
+ program
44
+ .command('create')
45
+ .description('Create a new Rool app')
46
+ .argument('<name>', 'project name')
47
+ .option('--svelte', 'use Svelte template')
48
+ .option('--vanilla', 'use vanilla TypeScript template')
49
+ .addHelpText('after', `
50
+ Examples:
51
+ # Create a Svelte app
52
+ $ rool create --svelte my-app
53
+
54
+ # Create a vanilla TypeScript app
55
+ $ rool create --vanilla my-app
56
+
57
+ # Using npx
58
+ $ npx @rool-dev/cli create --svelte my-app`)
59
+ .action(async (name, opts) => {
60
+ // Determine framework
61
+ let framework;
62
+ if (opts.svelte && opts.vanilla) {
63
+ console.error('Error: Cannot use both --svelte and --vanilla');
64
+ process.exit(1);
65
+ }
66
+ else if (opts.svelte) {
67
+ framework = 'svelte';
68
+ }
69
+ else if (opts.vanilla) {
70
+ framework = 'vanilla';
71
+ }
72
+ else {
73
+ console.error('Error: Please specify a framework: --svelte or --vanilla');
74
+ process.exit(1);
75
+ }
76
+ // Check if directory exists
77
+ const targetDir = path.resolve(process.cwd(), name);
78
+ if (fs.existsSync(targetDir)) {
79
+ console.error(`Error: Directory "${name}" already exists`);
80
+ process.exit(1);
81
+ }
82
+ // Find template
83
+ const templatesDir = getTemplatesDir();
84
+ const templateDir = path.join(templatesDir, framework);
85
+ if (!fs.existsSync(templateDir)) {
86
+ console.error(`Error: Template "${framework}" not found at ${templateDir}`);
87
+ process.exit(1);
88
+ }
89
+ // Copy template with replacements
90
+ const packageName = toValidPackageName(name);
91
+ const title = toTitleCase(name);
92
+ console.log(`Creating ${framework} app in ${name}/...\n`);
93
+ copyDir(templateDir, targetDir, [
94
+ ['rool-app', packageName],
95
+ ['Rool App', title],
96
+ ['"@rool-dev/sdk": "workspace:*"', '"@rool-dev/sdk": "^0.1.15"'],
97
+ ['"@rool-dev/svelte": "workspace:*"', '"@rool-dev/svelte": "^0.1.12"'],
98
+ ]);
99
+ // Print next steps
100
+ console.log(`Done! Next steps:\n`);
101
+ console.log(` cd ${name}`);
102
+ console.log(` pnpm install`);
103
+ console.log(` pnpm dev\n`);
104
+ console.log(`Key patterns:`);
105
+ if (framework === 'svelte') {
106
+ console.log(` • createRool() initializes the reactive client`);
107
+ console.log(` • rool.openSpace() connects to a space`);
108
+ console.log(` • space.collection() creates reactive queries`);
109
+ }
110
+ else {
111
+ console.log(` • new RoolClient() initializes the client`);
112
+ console.log(` • client.openSpace() connects to a space`);
113
+ console.log(` • space.on() subscribes to real-time events`);
114
+ }
115
+ console.log(` • space.prompt() invokes the AI agent\n`);
116
+ console.log(`Docs: https://docs.rool.dev`);
117
+ });
118
+ }
119
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
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,CAkBrD"}
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"}
package/dist/logout.js CHANGED
@@ -5,6 +5,10 @@ export function registerLogout(program) {
5
5
  .command('logout')
6
6
  .description('Log out')
7
7
  .option('-u, --url <url>', 'API URL', DEFAULT_API_URL)
8
+ .addHelpText('after', `
9
+ Examples:
10
+ # Log out
11
+ $ rool logout`)
8
12
  .action(async (opts) => {
9
13
  const client = await getClient(opts.url, { autoLogin: false });
10
14
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"logout.js","sourceRoot":"","sources":["../src/logout.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC7C,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,SAAS,CAAC;SACtB,MAAM,CAAC,iBAAiB,EAAE,SAAS,EAAE,eAAe,CAAC;SACrD,MAAM,CAAC,KAAK,EAAE,IAAqB,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,MAAM,CAAC,eAAe,EAAE,EAAE,CAAC;gBACpC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;YAChC,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,MAAM,EAAE,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"logout.js","sourceRoot":"","sources":["../src/logout.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC7C,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,SAAS,CAAC;SACtB,MAAM,CAAC,iBAAiB,EAAE,SAAS,EAAE,eAAe,CAAC;SACrD,WAAW,CAAC,OAAO,EAAE;;;gBAGV,CAAC;SACZ,MAAM,CAAC,KAAK,EAAE,IAAqB,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,MAAM,CAAC,eAAe,EAAE,EAAE,CAAC;gBACpC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;YAChC,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,MAAM,EAAE,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../src/media.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAazC,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmEpD"}
1
+ {"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../src/media.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAazC,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6EpD"}
package/dist/media.js CHANGED
@@ -23,6 +23,16 @@ export function registerMedia(program) {
23
23
  .option('-m, --message <text>', 'optional comment/description')
24
24
  .option('-s, --space <name>', 'space name', DEFAULT_SPACE_NAME)
25
25
  .option('-u, --url <url>', 'API URL', DEFAULT_API_URL)
26
+ .addHelpText('after', `
27
+ Examples:
28
+ # Upload a file
29
+ $ rool media upload photo.jpg
30
+
31
+ # Upload with a comment
32
+ $ rool media upload report.pdf -m "Q4 sales report"
33
+
34
+ # Upload to a specific space
35
+ $ rool media upload logo.png -s "My Project"`)
26
36
  .action(async (filePath, opts) => {
27
37
  if (!fs.existsSync(filePath)) {
28
38
  console.error(`File not found: ${filePath}`);
package/dist/media.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"media.js","sourceRoot":"","sources":["../src/media.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"media.js","sourceRoot":"","sources":["../src/media.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,aAAa,IAAI,OAAO,CAgBvC"}
1
+ {"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,wBAAgB,aAAa,IAAI,OAAO,CAiBvC"}
package/dist/program.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { Command } from 'commander';
2
2
  import { VERSION } from './constants.js';
3
3
  import { registerChat } from './chat.js';
4
+ import { registerCreate } from './create.js';
4
5
  import { registerMedia } from './media.js';
5
6
  import { registerSpace } from './space.js';
6
7
  import { registerApp } from './app.js';
@@ -13,6 +14,7 @@ export function createProgram() {
13
14
  .version(VERSION)
14
15
  .description('Command-line interface for the Rool platform');
15
16
  registerChat(program);
17
+ registerCreate(program);
16
18
  registerMedia(program);
17
19
  registerSpace(program);
18
20
  registerApp(program);
@@ -1 +1 @@
1
- {"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,UAAU,aAAa;IAC3B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,MAAM,CAAC;SACZ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,8CAA8C,CAAC,CAAC;IAE/D,YAAY,CAAC,OAAO,CAAC,CAAC;IACtB,aAAa,CAAC,OAAO,CAAC,CAAC;IACvB,aAAa,CAAC,OAAO,CAAC,CAAC;IACvB,WAAW,CAAC,OAAO,CAAC,CAAC;IACrB,YAAY,CAAC,OAAO,CAAC,CAAC;IACtB,cAAc,CAAC,OAAO,CAAC,CAAC;IAExB,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,UAAU,aAAa;IAC3B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,MAAM,CAAC;SACZ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,8CAA8C,CAAC,CAAC;IAE/D,YAAY,CAAC,OAAO,CAAC,CAAC;IACtB,cAAc,CAAC,OAAO,CAAC,CAAC;IACxB,aAAa,CAAC,OAAO,CAAC,CAAC;IACvB,aAAa,CAAC,OAAO,CAAC,CAAC;IACvB,WAAW,CAAC,OAAO,CAAC,CAAC;IACrB,YAAY,CAAC,OAAO,CAAC,CAAC;IACtB,cAAc,CAAC,OAAO,CAAC,CAAC;IAExB,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"space.d.ts","sourceRoot":"","sources":["../src/space.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBzC,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0EpD"}
1
+ {"version":3,"file":"space.d.ts","sourceRoot":"","sources":["../src/space.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBzC,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyFpD"}
package/dist/space.js CHANGED
@@ -29,6 +29,10 @@ export function registerSpace(program) {
29
29
  .command('list')
30
30
  .description('List all spaces')
31
31
  .option('-u, --url <url>', 'API URL', DEFAULT_API_URL)
32
+ .addHelpText('after', `
33
+ Examples:
34
+ # List your spaces
35
+ $ rool space list`)
32
36
  .action(async (opts) => {
33
37
  await listSpaces(opts.url);
34
38
  });
@@ -37,6 +41,10 @@ export function registerSpace(program) {
37
41
  .description('Create a new space')
38
42
  .argument('<name>', 'space name')
39
43
  .option('-u, --url <url>', 'API URL', DEFAULT_API_URL)
44
+ .addHelpText('after', `
45
+ Examples:
46
+ # Create a new space
47
+ $ rool space create "My New Project"`)
40
48
  .action(async (name, opts) => {
41
49
  const client = await getClient(opts.url);
42
50
  try {
@@ -54,6 +62,13 @@ export function registerSpace(program) {
54
62
  .argument('<name>', 'space name')
55
63
  .option('-y, --yes', 'skip confirmation prompt')
56
64
  .option('-u, --url <url>', 'API URL', DEFAULT_API_URL)
65
+ .addHelpText('after', `
66
+ Examples:
67
+ # Delete a space (with confirmation)
68
+ $ rool space delete "Old Project"
69
+
70
+ # Delete without confirmation
71
+ $ rool space delete "Old Project" -y`)
57
72
  .action(async (name, opts) => {
58
73
  const client = await getClient(opts.url);
59
74
  try {
package/dist/space.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"space.js","sourceRoot":"","sources":["../src/space.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"space.js","sourceRoot":"","sources":["../src/space.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../src/user.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuBnD"}
1
+ {"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../src/user.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2BnD"}
package/dist/user.js CHANGED
@@ -5,6 +5,10 @@ export function registerUser(program) {
5
5
  .command('user')
6
6
  .description('Show current user info')
7
7
  .option('-u, --url <url>', 'API URL', DEFAULT_API_URL)
8
+ .addHelpText('after', `
9
+ Examples:
10
+ # Show user info
11
+ $ rool user`)
8
12
  .action(async (opts) => {
9
13
  const client = await getClient(opts.url, { autoLogin: false });
10
14
  try {
package/dist/user.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"user.js","sourceRoot":"","sources":["../src/user.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,UAAU,YAAY,CAAC,OAAgB;IAC3C,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,wBAAwB,CAAC;SACrC,MAAM,CAAC,iBAAiB,EAAE,SAAS,EAAE,eAAe,CAAC;SACrD,MAAM,CAAC,KAAK,EAAE,IAAqB,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,MAAM,CAAC,eAAe,EAAE,EAAE,CAAC;gBACpC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;gBAC9B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,cAAc,EAAE,CAAC;YAElD,OAAO,CAAC,GAAG,CAAC,YAAY,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,YAAY,WAAW,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC,CAAC;YAC3D,OAAO,CAAC,GAAG,CAAC,YAAY,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,YAAY,WAAW,CAAC,cAAc,EAAE,CAAC,CAAC;QACxD,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"user.js","sourceRoot":"","sources":["../src/user.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,UAAU,YAAY,CAAC,OAAgB;IAC3C,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,wBAAwB,CAAC;SACrC,MAAM,CAAC,iBAAiB,EAAE,SAAS,EAAE,eAAe,CAAC;SACrD,WAAW,CAAC,OAAO,EAAE;;;cAGZ,CAAC;SACV,MAAM,CAAC,KAAK,EAAE,IAAqB,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,MAAM,CAAC,eAAe,EAAE,EAAE,CAAC;gBACpC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;gBAC9B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,cAAc,EAAE,CAAC;YAElD,OAAO,CAAC,GAAG,CAAC,YAAY,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,YAAY,WAAW,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC,CAAC;YAC3D,OAAO,CAAC,GAAG,CAAC,YAAY,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,YAAY,WAAW,CAAC,cAAc,EAAE,CAAC,CAAC;QACxD,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rool-dev/cli",
3
- "version": "0.1.10",
3
+ "version": "0.1.11-dev.f460594",
4
4
  "description": "Command-line interface for working with Rool Spaces",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -9,7 +9,8 @@
9
9
  "rool": "./dist/index.js"
10
10
  },
11
11
  "files": [
12
- "dist"
12
+ "dist",
13
+ "templates"
13
14
  ],
14
15
  "publishConfig": {
15
16
  "access": "public"
@@ -37,7 +38,7 @@
37
38
  "commander": "^14.0.3",
38
39
  "marked": "^15.0.12",
39
40
  "marked-terminal": "^7.3.0",
40
- "@rool-dev/sdk": "0.1.11"
41
+ "@rool-dev/sdk": "0.1.15"
41
42
  },
42
43
  "devDependencies": {
43
44
  "@types/archiver": "^7.0.0",
@@ -0,0 +1,57 @@
1
+ # Rool App
2
+
3
+ A Svelte 5 app built on Rool Spaces - a persistent, collaborative environment for AI-driven object management.
4
+
5
+ ## Technology Stack
6
+
7
+ - **Framework**: Svelte 5
8
+ - **Styling**: TailwindCSS v4
9
+ - **Language**: TypeScript
10
+ - **Package manager**: pnpm
11
+
12
+ For Rool documentation, **always read the README first**:
13
+
14
+ ```
15
+ node_modules/@rool-dev/svelte/README.md # The svelte wrapper
16
+ node_modules/@rool-dev/sdk/README.md # The core SDK
17
+ ```
18
+
19
+ ## Rool Primitives
20
+
21
+ **RoolClient** - Authentication and space lifecycle. One per app.
22
+
23
+ **ReactiveSpace** - The workspace. Contains objects, relations, and conversations.
24
+ - `space.collection({ where? })` - Reactive query returning `{ objects }`
25
+ - `space.prompt(text)` - Invoke AI to create/modify objects
26
+ - `space.checkpoint()` - Create undo point before mutations
27
+ - `space.interactions` - Chat history for current conversation
28
+
29
+ **Objects** - Key-value records with `id` field. Created via `space.createObject()` or AI.
30
+
31
+ **Relations** - Directional links between objects via `space.link(source, relation, target)`.
32
+
33
+ ## Key Patterns
34
+
35
+ ```typescript
36
+ // Reactive collection - auto-updates when objects change
37
+ let collection = space.collection({ where: { type: 'task' } });
38
+ let tasks = $derived(collection.objects);
39
+
40
+ // AI mutation - always checkpoint first for undo
41
+ await space.checkpoint();
42
+ await space.prompt('Create a task for tomorrow');
43
+ ```
44
+
45
+ Use `space.on('objectCreated', ...)` for side effects outside Svelte's reactivity.
46
+
47
+ ## Entry Point
48
+
49
+ `src/main.ts` mounts `App.svelte`, which handles auth and space setup.
50
+
51
+
52
+ ## Adding Functionality
53
+
54
+ Useful packages to consider:
55
+
56
+ - **@iconify/svelte** - Icons (`<Icon icon="mdi:home" />`)
57
+ - **@humanspeak/svelte-markdown** - Render markdown from AI responses
@@ -0,0 +1,12 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
6
+ <title>Rool App</title>
7
+ </head>
8
+ <body>
9
+ <div id="app"></div>
10
+ <script type="module" src="/src/main.ts"></script>
11
+ </body>
12
+ </html>
@@ -0,0 +1,25 @@
1
+ {
2
+ "name": "rool-app",
3
+ "private": true,
4
+ "version": "0.0.0",
5
+ "type": "module",
6
+ "scripts": {
7
+ "dev": "vite",
8
+ "build": "vite build",
9
+ "preview": "vite preview",
10
+ "typecheck": "tsc --noEmit && svelte-check --tsconfig ./tsconfig.json"
11
+ },
12
+ "dependencies": {
13
+ "@rool-dev/sdk": "workspace:*",
14
+ "@rool-dev/svelte": "workspace:*"
15
+ },
16
+ "devDependencies": {
17
+ "@sveltejs/vite-plugin-svelte": "^5.0.0",
18
+ "@tailwindcss/vite": "^4.0.0",
19
+ "svelte": "^5.0.0",
20
+ "svelte-check": "^4.0.0",
21
+ "tailwindcss": "^4.0.0",
22
+ "typescript": "^5.0.0",
23
+ "vite": "^6.0.0"
24
+ }
25
+ }
@@ -0,0 +1,54 @@
1
+ <script lang="ts">
2
+ import { createRool, type ReactiveSpace } from '@rool-dev/svelte';
3
+ import Splash from './Splash.svelte';
4
+ import Header from './Header.svelte';
5
+ import Chat from './Chat.svelte';
6
+ import Objects from './Objects.svelte';
7
+
8
+ const APP_NAME = 'Rool App';
9
+
10
+ const rool = createRool();
11
+ rool.init();
12
+
13
+ let space = $state<ReactiveSpace | null>(null);
14
+
15
+ // Open space when ready
16
+ $effect(() => {
17
+ if (rool.authenticated && rool.spaces && !space) {
18
+ openSpace();
19
+ }
20
+ });
21
+
22
+ async function openSpace() {
23
+ const spaces = rool.spaces!;
24
+ const existing = spaces.find(s => s.name === APP_NAME);
25
+
26
+ space = existing
27
+ ? await rool.openSpace(existing.id, { conversationId: 'main' })
28
+ : await rool.createSpace(APP_NAME, { conversationId: 'main' });
29
+ }
30
+ </script>
31
+
32
+ {#if rool.authenticated === undefined}
33
+ <div class="min-h-dvh flex items-center justify-center bg-gray-50">
34
+ <p class="text-gray-500">Loading...</p>
35
+ </div>
36
+ {:else if rool.authenticated === false}
37
+ <Splash appName={APP_NAME} onLogin={() => rool.login(APP_NAME)} />
38
+ {:else}
39
+ <div class="min-h-dvh flex flex-col bg-gray-50">
40
+ <Header appName={APP_NAME} {space} onLogout={() => rool.logout()} />
41
+
42
+ {#if !space}
43
+ <div class="flex-1 flex items-center justify-center">
44
+ <p class="text-gray-500">Loading space...</p>
45
+ </div>
46
+ {:else}
47
+ <!-- Mobile: horizontal swipe with scroll-snap. Desktop: side-by-side -->
48
+ <div class="flex-1 flex overflow-x-auto snap-x snap-mandatory md:overflow-visible min-h-0">
49
+ <Chat {space} />
50
+ <Objects {space} />
51
+ </div>
52
+ {/if}
53
+ </div>
54
+ {/if}
@@ -0,0 +1,92 @@
1
+ <script lang="ts">
2
+ import type { ReactiveSpace } from '@rool-dev/svelte';
3
+
4
+ interface Props {
5
+ space: ReactiveSpace;
6
+ }
7
+
8
+ let { space }: Props = $props();
9
+
10
+ let input = $state('');
11
+ let isSending = $state(false);
12
+ let messagesEl: HTMLElement | null = $state(null);
13
+
14
+ let interactions = $derived(space.interactions);
15
+
16
+ // Auto-scroll on new messages
17
+ $effect(() => {
18
+ if (interactions.length > 0 && messagesEl) {
19
+ messagesEl.scrollTop = messagesEl.scrollHeight;
20
+ }
21
+ });
22
+
23
+ async function send() {
24
+ if (!input.trim() || isSending) return;
25
+
26
+ const text = input.trim();
27
+ input = '';
28
+ isSending = true;
29
+
30
+ try {
31
+ await space.checkpoint();
32
+ await space.prompt(text);
33
+ } finally {
34
+ isSending = false;
35
+ }
36
+ }
37
+
38
+ function handleKeydown(e: KeyboardEvent) {
39
+ if (e.key === 'Enter' && !e.shiftKey) {
40
+ e.preventDefault();
41
+ send();
42
+ }
43
+ }
44
+ </script>
45
+
46
+ <div class="w-full shrink-0 snap-start md:flex-1 md:shrink md:snap-align-none flex flex-col min-w-0">
47
+ <div class="flex-1 overflow-y-auto p-4 space-y-4" bind:this={messagesEl}>
48
+ {#if interactions.length === 0}
49
+ <div class="text-center py-16 text-gray-500">
50
+ <p class="text-lg mb-2">Welcome!</p>
51
+ <p class="text-sm">Ask the AI to create objects, answer questions, or help with tasks.</p>
52
+ </div>
53
+ {:else}
54
+ {#each interactions as msg (msg.id)}
55
+ <div class="flex justify-end">
56
+ <div class="max-w-[75%] bg-blue-600 text-white rounded-2xl rounded-br-sm px-4 py-2">
57
+ <p class="text-sm whitespace-pre-wrap">{msg.input}</p>
58
+ </div>
59
+ </div>
60
+ <div class="flex justify-start">
61
+ <div class="max-w-[75%] bg-white border border-gray-200 rounded-2xl rounded-bl-sm px-4 py-2 shadow-sm">
62
+ {#if msg.output}
63
+ <p class="text-sm text-gray-700 whitespace-pre-wrap">{msg.output}</p>
64
+ {:else}
65
+ <p class="text-sm text-gray-400 italic">Thinking...</p>
66
+ {/if}
67
+ </div>
68
+ </div>
69
+ {/each}
70
+ {/if}
71
+ </div>
72
+
73
+ <div class="border-t border-gray-200 bg-white p-4">
74
+ <div class="flex gap-2">
75
+ <textarea
76
+ class="flex-1 px-4 py-2 border border-gray-300 rounded-xl resize-none focus:outline-none focus:ring-2 focus:ring-blue-500 min-h-[44px] max-h-32"
77
+ placeholder="Type a message..."
78
+ rows="1"
79
+ bind:value={input}
80
+ onkeydown={handleKeydown}
81
+ disabled={isSending}
82
+ ></textarea>
83
+ <button
84
+ class="px-5 py-2 bg-blue-600 text-white rounded-xl hover:bg-blue-700 disabled:opacity-50"
85
+ onclick={send}
86
+ disabled={isSending || !input.trim()}
87
+ >
88
+ {isSending ? '...' : 'Send'}
89
+ </button>
90
+ </div>
91
+ </div>
92
+ </div>
@@ -0,0 +1,26 @@
1
+ <script lang="ts">
2
+ import type { ReactiveSpace } from '@rool-dev/svelte';
3
+
4
+ interface Props {
5
+ appName: string;
6
+ space: ReactiveSpace | null;
7
+ onLogout: () => void;
8
+ }
9
+
10
+ let { appName, space, onLogout }: Props = $props();
11
+ </script>
12
+
13
+ <header class="bg-white border-b border-gray-200 px-4 py-3 flex items-center justify-between">
14
+ <h1 class="text-lg font-semibold text-gray-900">{appName}</h1>
15
+ <div class="flex items-center gap-3">
16
+ {#if space}
17
+ <span class="text-sm text-gray-500 hidden sm:inline">{space.name}</span>
18
+ {/if}
19
+ <button
20
+ class="px-3 py-1.5 text-sm text-gray-500 hover:text-gray-700"
21
+ onclick={onLogout}
22
+ >
23
+ Sign out
24
+ </button>
25
+ </div>
26
+ </header>
@@ -0,0 +1,39 @@
1
+ <script lang="ts">
2
+ import type { ReactiveSpace, ReactiveCollection } from '@rool-dev/svelte';
3
+
4
+ interface Props {
5
+ space: ReactiveSpace;
6
+ }
7
+
8
+ let { space }: Props = $props();
9
+
10
+ let collection = $state<ReactiveCollection | null>(null);
11
+
12
+ $effect(() => {
13
+ const c = space.collection({});
14
+ collection = c;
15
+ return () => c.close();
16
+ });
17
+
18
+ let objects = $derived(collection?.objects ?? []);
19
+ </script>
20
+
21
+ <!-- Mobile: full width swipe panel. Desktop: side panel -->
22
+ <aside class="w-full shrink-0 snap-start md:w-80 md:shrink md:snap-align-none border-l border-gray-200 bg-white flex flex-col">
23
+ <div class="px-4 py-3 border-b border-gray-200">
24
+ <h2 class="font-medium text-gray-700">Objects ({objects.length})</h2>
25
+ </div>
26
+ <div class="flex-1 overflow-y-auto p-4 space-y-3">
27
+ {#if objects.length === 0}
28
+ <p class="text-gray-400 text-sm text-center py-4">
29
+ Objects created by the AI will appear here
30
+ </p>
31
+ {:else}
32
+ {#each objects as obj (obj.id)}
33
+ <div class="p-3 bg-gray-50 rounded-lg border border-gray-200">
34
+ <pre class="text-xs text-gray-600 overflow-auto">{JSON.stringify(obj, null, 2)}</pre>
35
+ </div>
36
+ {/each}
37
+ {/if}
38
+ </div>
39
+ </aside>
@@ -0,0 +1,21 @@
1
+ <script lang="ts">
2
+ interface Props {
3
+ appName: string;
4
+ onLogin: () => void;
5
+ }
6
+
7
+ let { appName, onLogin }: Props = $props();
8
+ </script>
9
+
10
+ <div class="min-h-dvh flex flex-col items-center justify-center bg-gray-50 p-8">
11
+ <div class="text-center max-w-sm">
12
+ <h1 class="text-3xl font-bold text-gray-900 mb-2">{appName}</h1>
13
+ <p class="text-gray-500 mb-8">Sign in to get started</p>
14
+ <button
15
+ class="px-6 py-3 bg-gray-900 hover:bg-gray-800 text-white font-medium rounded-lg transition-colors"
16
+ onclick={onLogin}
17
+ >
18
+ Sign in
19
+ </button>
20
+ </div>
21
+ </div>
@@ -0,0 +1 @@
1
+ @import 'tailwindcss';
@@ -0,0 +1,5 @@
1
+ import { mount } from 'svelte';
2
+ import App from './App.svelte';
3
+ import './app.css';
4
+
5
+ mount(App, { target: document.getElementById('app')! });
@@ -0,0 +1,13 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ESNext",
4
+ "module": "ESNext",
5
+ "moduleResolution": "bundler",
6
+ "verbatimModuleSyntax": true,
7
+ "resolveJsonModule": true,
8
+ "isolatedModules": true,
9
+ "strict": true,
10
+ "noEmit": true
11
+ },
12
+ "include": ["src/**/*.ts", "src/**/*.svelte"]
13
+ }
@@ -0,0 +1,8 @@
1
+ import { defineConfig } from 'vite';
2
+ import { svelte } from '@sveltejs/vite-plugin-svelte';
3
+ import tailwindcss from '@tailwindcss/vite';
4
+
5
+ export default defineConfig({
6
+ base: './',
7
+ plugins: [tailwindcss(), svelte()],
8
+ });
@@ -0,0 +1,63 @@
1
+ # Rool App
2
+
3
+ A vanilla TypeScript app built on Rool Spaces - a persistent, collaborative environment for AI-driven object management.
4
+
5
+ ## Technology Stack
6
+
7
+ - **Language**: TypeScript
8
+ - **Styling**: TailwindCSS v4
9
+ - **Bundler**: Vite
10
+ - **Package manager**: pnpm
11
+
12
+ For Rool documentation, **always read the README first**:
13
+
14
+ ```
15
+ node_modules/@rool-dev/sdk/README.md
16
+ ```
17
+
18
+ ## Rool Primitives
19
+
20
+ **RoolClient** - Authentication and space lifecycle. One per app.
21
+
22
+ **RoolSpace** - The workspace. Contains objects, relations, and conversations.
23
+ - `space.prompt(text)` - Invoke AI to create/modify objects
24
+ - `space.checkpoint()` - Create undo point before mutations
25
+ - `space.on(event, handler)` - Subscribe to real-time events
26
+ - `space.findObjects({ where? })` - Query objects
27
+
28
+ **Objects** - Key-value records with `id` field. Created via `space.createObject()` or AI.
29
+
30
+ **Relations** - Directional links between objects via `space.link(source, relation, target)`.
31
+
32
+ ## Event-Driven Pattern
33
+
34
+ The SDK emits events for all changes. Build reactive UIs by subscribing:
35
+
36
+ ```typescript
37
+ space.on('objectCreated', ({ objectId, object, source }) => {
38
+ // source: 'local_user' | 'remote_user' | 'remote_agent' | 'system'
39
+ updateUI(object);
40
+ });
41
+
42
+ space.on('objectUpdated', ({ objectId, object }) => { ... });
43
+ space.on('objectDeleted', ({ objectId }) => { ... });
44
+ space.on('linked', ({ sourceId, relation, targetId }) => { ... });
45
+ space.on('unlinked', ({ sourceId, relation, targetId }) => { ... });
46
+ ```
47
+
48
+ ## Key Pattern
49
+
50
+ ```typescript
51
+ // Always checkpoint before AI mutations for undo support
52
+ await space.checkpoint();
53
+ const { message, objects } = await space.prompt('Create a task');
54
+ ```
55
+
56
+ ## Entry Point
57
+
58
+ `src/main.ts` - Single file with auth, rendering, and event handlers.
59
+
60
+ ## Adding Functionality
61
+
62
+ Useful packages:
63
+ - **marked** - Render markdown from AI responses
@@ -0,0 +1,12 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
6
+ <title>Rool App</title>
7
+ </head>
8
+ <body>
9
+ <div id="app"></div>
10
+ <script type="module" src="/src/main.ts"></script>
11
+ </body>
12
+ </html>
@@ -0,0 +1,21 @@
1
+ {
2
+ "name": "rool-app",
3
+ "private": true,
4
+ "version": "0.0.0",
5
+ "type": "module",
6
+ "scripts": {
7
+ "dev": "vite",
8
+ "build": "vite build",
9
+ "preview": "vite preview",
10
+ "typecheck": "tsc --noEmit"
11
+ },
12
+ "dependencies": {
13
+ "@rool-dev/sdk": "workspace:*"
14
+ },
15
+ "devDependencies": {
16
+ "@tailwindcss/vite": "^4.0.0",
17
+ "tailwindcss": "^4.0.0",
18
+ "typescript": "^5.0.0",
19
+ "vite": "^6.0.0"
20
+ }
21
+ }
@@ -0,0 +1 @@
1
+ @import 'tailwindcss';
@@ -0,0 +1,158 @@
1
+ import { RoolClient, type RoolSpace } from '@rool-dev/sdk';
2
+ import './app.css';
3
+
4
+ const APP_NAME = 'Rool App';
5
+
6
+ const client = new RoolClient();
7
+ const app = document.getElementById('app')!;
8
+
9
+ let logEl: HTMLElement;
10
+ let inputEl: HTMLInputElement;
11
+ let buttonEl: HTMLButtonElement;
12
+
13
+ // --- Rendering ---
14
+
15
+ function renderSplash() {
16
+ app.innerHTML = `
17
+ <div class="min-h-dvh flex flex-col items-center justify-center bg-gray-50 p-8">
18
+ <div class="text-center max-w-sm">
19
+ <h1 class="text-3xl font-bold text-gray-900 mb-2">${APP_NAME}</h1>
20
+ <p class="text-gray-500 mb-8">Sign in to get started</p>
21
+ <button id="login-btn" class="px-6 py-3 bg-gray-900 hover:bg-gray-800 text-white font-medium rounded-lg">
22
+ Sign in
23
+ </button>
24
+ </div>
25
+ </div>
26
+ `;
27
+ document.getElementById('login-btn')!.onclick = () => client.login(APP_NAME);
28
+ }
29
+
30
+ function renderApp(space: RoolSpace) {
31
+ app.innerHTML = `
32
+ <div class="min-h-dvh flex flex-col bg-gray-900 text-gray-100 font-mono text-sm">
33
+ <header class="flex items-center justify-between px-4 py-2 border-b border-gray-700">
34
+ <span class="text-gray-400">${APP_NAME}</span>
35
+ <button id="logout-btn" class="text-gray-500 hover:text-gray-300">logout</button>
36
+ </header>
37
+ <div id="log" class="flex-1 overflow-y-auto p-4 space-y-1"></div>
38
+ <form id="prompt-form" class="border-t border-gray-700 p-4">
39
+ <div class="flex gap-2">
40
+ <span class="text-green-400">&gt;</span>
41
+ <input
42
+ type="text"
43
+ id="prompt-input"
44
+ placeholder="Type a prompt..."
45
+ class="flex-1 bg-transparent outline-none text-gray-100 placeholder-gray-600"
46
+ autocomplete="off"
47
+ />
48
+ <button type="submit" id="submit-btn" class="text-gray-500 hover:text-gray-300 disabled:opacity-50">
49
+ send
50
+ </button>
51
+ </div>
52
+ </form>
53
+ </div>
54
+ `;
55
+
56
+ logEl = document.getElementById('log')!;
57
+ inputEl = document.getElementById('prompt-input') as HTMLInputElement;
58
+ buttonEl = document.getElementById('submit-btn') as HTMLButtonElement;
59
+
60
+ document.getElementById('logout-btn')!.onclick = () => {
61
+ client.logout();
62
+ location.reload();
63
+ };
64
+
65
+ const form = document.getElementById('prompt-form') as HTMLFormElement;
66
+ form.onsubmit = async (e) => {
67
+ e.preventDefault();
68
+ const text = inputEl.value.trim();
69
+ if (!text) return;
70
+
71
+ log('prompt', text);
72
+ inputEl.value = '';
73
+ inputEl.disabled = true;
74
+ buttonEl.disabled = true;
75
+
76
+ try {
77
+ await space.checkpoint();
78
+ const { message } = await space.prompt(text);
79
+ log('response', message);
80
+ } catch (err) {
81
+ log('error', err instanceof Error ? err.message : String(err));
82
+ } finally {
83
+ inputEl.disabled = false;
84
+ buttonEl.disabled = false;
85
+ inputEl.focus();
86
+ }
87
+ };
88
+
89
+ // Subscribe to space events
90
+ space.on('objectCreated', ({ objectId, object }) => {
91
+ log('objectCreated', `${objectId}: ${JSON.stringify(object)}`);
92
+ });
93
+
94
+ space.on('objectUpdated', ({ objectId, object }) => {
95
+ log('objectUpdated', `${objectId}: ${JSON.stringify(object)}`);
96
+ });
97
+
98
+ space.on('objectDeleted', ({ objectId }) => {
99
+ log('objectDeleted', objectId);
100
+ });
101
+
102
+ space.on('linked', ({ sourceId, relation, targetId }) => {
103
+ log('linked', `${sourceId} --${relation}--> ${targetId}`);
104
+ });
105
+
106
+ space.on('unlinked', ({ sourceId, relation, targetId }) => {
107
+ log('unlinked', `${sourceId} --${relation}--> ${targetId}`);
108
+ });
109
+
110
+ log('info', `Connected to space "${space.name}"`);
111
+ log('info', 'Type a prompt to create or modify objects. Events will appear here.');
112
+ inputEl.focus();
113
+ }
114
+
115
+ function log(type: string, content: string) {
116
+ const line = document.createElement('div');
117
+ const colors: Record<string, string> = {
118
+ prompt: 'text-green-400',
119
+ response: 'text-blue-400',
120
+ info: 'text-gray-500',
121
+ error: 'text-red-400',
122
+ objectCreated: 'text-yellow-400',
123
+ objectUpdated: 'text-yellow-400',
124
+ objectDeleted: 'text-orange-400',
125
+ linked: 'text-purple-400',
126
+ unlinked: 'text-purple-400',
127
+ };
128
+ const color = colors[type] || 'text-gray-400';
129
+
130
+ line.innerHTML = `<span class="${color}">[${type}]</span> <span class="text-gray-300">${escapeHtml(content)}</span>`;
131
+ logEl.appendChild(line);
132
+ logEl.scrollTop = logEl.scrollHeight;
133
+ }
134
+
135
+ function escapeHtml(text: string): string {
136
+ return text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
137
+ }
138
+
139
+ // --- Main ---
140
+
141
+ async function main() {
142
+ const authenticated = await client.initialize();
143
+
144
+ if (!authenticated) {
145
+ renderSplash();
146
+ return;
147
+ }
148
+
149
+ // Find or create a space for this app
150
+ const spaces = await client.listSpaces();
151
+ const existing = spaces.find((s) => s.name === APP_NAME);
152
+
153
+ const space = existing ? await client.openSpace(existing.id) : await client.createSpace(APP_NAME);
154
+
155
+ renderApp(space);
156
+ }
157
+
158
+ main().catch(console.error);
@@ -0,0 +1,10 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ESNext",
4
+ "module": "ESNext",
5
+ "moduleResolution": "bundler",
6
+ "strict": true,
7
+ "noEmit": true
8
+ },
9
+ "include": ["src/**/*"]
10
+ }
@@ -0,0 +1,7 @@
1
+ import { defineConfig } from 'vite';
2
+ import tailwindcss from '@tailwindcss/vite';
3
+
4
+ export default defineConfig({
5
+ base: './',
6
+ plugins: [tailwindcss()],
7
+ });