@rool-dev/svelte 0.3.1-dev.fa375c5 → 0.3.2-dev.1f10ef1

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
@@ -55,6 +55,8 @@ The Svelte wrapper adds reactive state on top of the SDK:
55
55
  | `channel.interactions` | Channel interactions (auto-updates) |
56
56
  | `channel.objectIds` | All object IDs in the space (auto-updates on create/delete) |
57
57
  | `channel.collections` | Collection names from the schema (auto-updates) |
58
+ | `channel.conversations` | Conversations in this channel (auto-updates on create/delete/rename) |
59
+ | `thread.interactions` | Interactions for a specific conversation (auto-updates) |
58
60
  | `watch.objects` | Objects matching a filter (auto-updates) |
59
61
  | `watch.loading` | Whether watch is loading |
60
62
 
@@ -125,9 +127,12 @@ Reactive cross-device storage for user preferences. Synced from server on `init(
125
127
  ### Spaces & Channels
126
128
 
127
129
  ```typescript
128
- // Open a channel — reactive, with SSE
130
+ // Open a channel — reactive, with SSE (default conversation)
129
131
  const channel = await rool.openChannel('space-id', 'my-channel');
130
132
 
133
+ // Open a channel with a specific conversation
134
+ const channel = await rool.openChannel('space-id', 'my-channel', 'thread-1');
135
+
131
136
  // Create a space, then open a channel on it
132
137
  const space = await rool.createSpace('My New Space');
133
138
  const channel = await space.openChannel('main');
@@ -292,6 +297,48 @@ channelList.refresh() // Manual re-fetch
292
297
  channelList.close() // Stop listening for updates
293
298
  ```
294
299
 
300
+ ### Reactive Conversation Handle
301
+
302
+ For apps with multiple independent interaction threads (e.g., chat with threads), use `channel.conversation()` to get a handle with reactive interactions:
303
+
304
+ ```svelte
305
+ <script>
306
+ let channel = $state(null);
307
+ let thread = $state(null);
308
+
309
+ async function openThread(spaceId, threadId) {
310
+ channel = await rool.openChannel(spaceId, 'main');
311
+ thread = channel.conversation(threadId);
312
+ }
313
+ </script>
314
+
315
+ {#if thread}
316
+ {#each thread.interactions as interaction}
317
+ <div>{interaction.output}</div>
318
+ {/each}
319
+
320
+ <button onclick={() => thread.prompt('Hello')}>Send</button>
321
+ {/if}
322
+ ```
323
+
324
+ ```typescript
325
+ // Reactive state
326
+ thread.interactions // $state<Interaction[]> — auto-updates via SSE
327
+
328
+ // All conversation-scoped methods
329
+ await thread.prompt('Hello')
330
+ await thread.createObject({ data: { text: 'Note' } })
331
+ await thread.setSystemInstruction('Respond in haiku')
332
+ await thread.rename('Research Thread')
333
+ thread.getInteractions() // Manual read
334
+ thread.getSystemInstruction()
335
+
336
+ // Cleanup
337
+ thread.close() // Stop listening for updates
338
+ ```
339
+
340
+ Conversations are auto-created on first interaction. All conversations share one SSE connection per channel.
341
+
295
342
  ### Channel Management
296
343
 
297
344
  ```typescript
@@ -340,9 +387,18 @@ await channel.checkpoint('Before edit')
340
387
  await channel.undo()
341
388
  await channel.redo()
342
389
 
343
- // Interaction history
390
+ // Interaction history & conversations
344
391
  await channel.setSystemInstruction('You are helpful')
345
392
  channel.getInteractions()
393
+ channel.getConversations()
394
+ await channel.deleteConversation('old-thread')
395
+ await channel.renameConversation('Research')
396
+
397
+ // Conversation handles (reactive interactions for specific conversations)
398
+ const thread = channel.conversation('thread-42');
399
+ await thread.prompt('Hello'); // Uses thread-42's interaction history
400
+ // thread.interactions is reactive $state — auto-updates via SSE
401
+ thread.close(); // Stop listening when done
346
402
 
347
403
  // Channel admin
348
404
  await channel.rename('New Name')
@@ -363,10 +419,12 @@ const id = generateId();
363
419
 
364
420
  ```typescript
365
421
  // Package types
366
- import type { Rool, ReactiveChannel, ReactiveObject, ReactiveWatch, WatchOptions, ReactiveChannelList } from '@rool-dev/svelte';
422
+ import type { Rool, ReactiveChannel, ReactiveConversationHandle, ReactiveObject, ReactiveWatch, WatchOptions, ReactiveChannelList } from '@rool-dev/svelte';
367
423
 
368
424
  // Re-exported from @rool-dev/sdk
369
425
  import type {
426
+ RoolClient,
427
+ RoolClientConfig,
370
428
  RoolChannel,
371
429
  RoolSpace,
372
430
  RoolSpaceInfo,
@@ -375,6 +433,9 @@ import type {
375
433
  RoolUserRole,
376
434
  ConnectionState,
377
435
  ChannelInfo,
436
+ Conversation,
437
+ ConversationInfo,
438
+ CurrentUser,
378
439
  Interaction,
379
440
  FindObjectsOptions,
380
441
  PromptOptions,
@@ -384,6 +445,12 @@ import type {
384
445
  FieldDef,
385
446
  CollectionDef,
386
447
  SpaceSchema,
448
+ SpaceMember,
449
+ UserResult,
450
+ PublishedAppInfo,
451
+ PublishAppOptions,
452
+ AppManifest,
453
+ FindAppsOptions,
387
454
  } from '@rool-dev/svelte';
388
455
  ```
389
456
 
@@ -1,4 +1,4 @@
1
- import type { RoolChannel, RoolClient, Interaction, RoolObject, ChannelInfo } from '@rool-dev/sdk';
1
+ import type { RoolChannel, RoolClient, Interaction, RoolObject, ChannelInfo, ConversationInfo, ConversationHandle } from '@rool-dev/sdk';
2
2
  /**
3
3
  * Options for creating a reactive watch.
4
4
  * Same as FindObjectsOptions but without `prompt` (AI queries are too slow for reactive updates).
@@ -49,6 +49,48 @@ declare class ReactiveObjectImpl {
49
49
  close(): void;
50
50
  }
51
51
  export type ReactiveObject = ReactiveObjectImpl;
52
+ /**
53
+ * A reactive conversation handle that auto-updates interactions when the
54
+ * conversation changes. Wraps the SDK's ConversationHandle with $state.
55
+ *
56
+ * Call `close()` when done to stop listening for updates.
57
+ */
58
+ declare class ReactiveConversationHandleImpl {
59
+ #private;
60
+ interactions: Interaction[];
61
+ constructor(channel: RoolChannel, conversationId: string);
62
+ get conversationId(): string;
63
+ getInteractions(): Interaction[];
64
+ getSystemInstruction(): string | undefined;
65
+ setSystemInstruction(...args: Parameters<ConversationHandle['setSystemInstruction']>): Promise<void>;
66
+ rename(...args: Parameters<ConversationHandle['rename']>): Promise<void>;
67
+ findObjects(...args: Parameters<ConversationHandle['findObjects']>): Promise<{
68
+ objects: RoolObject[];
69
+ message: string;
70
+ }>;
71
+ createObject(...args: Parameters<ConversationHandle['createObject']>): Promise<{
72
+ object: RoolObject;
73
+ message: string;
74
+ }>;
75
+ updateObject(...args: Parameters<ConversationHandle['updateObject']>): Promise<{
76
+ object: RoolObject;
77
+ message: string;
78
+ }>;
79
+ deleteObjects(...args: Parameters<ConversationHandle['deleteObjects']>): Promise<void>;
80
+ prompt(...args: Parameters<ConversationHandle['prompt']>): Promise<{
81
+ message: string;
82
+ objects: RoolObject[];
83
+ }>;
84
+ createCollection(...args: Parameters<ConversationHandle['createCollection']>): Promise<import("@rool-dev/sdk").CollectionDef>;
85
+ alterCollection(...args: Parameters<ConversationHandle['alterCollection']>): Promise<import("@rool-dev/sdk").CollectionDef>;
86
+ dropCollection(...args: Parameters<ConversationHandle['dropCollection']>): Promise<void>;
87
+ setMetadata(...args: Parameters<ConversationHandle['setMetadata']>): void;
88
+ /**
89
+ * Stop listening for updates and clean up.
90
+ */
91
+ close(): void;
92
+ }
93
+ export type ReactiveConversationHandle = ReactiveConversationHandleImpl;
52
94
  /**
53
95
  * Minimal wrapper that adds reactive `interactions` to RoolChannel.
54
96
  * All other properties and methods are proxied to the underlying channel.
@@ -58,6 +100,7 @@ declare class ReactiveChannelImpl {
58
100
  interactions: Interaction[];
59
101
  objectIds: string[];
60
102
  collections: string[];
103
+ conversations: ConversationInfo[];
61
104
  constructor(channel: RoolChannel);
62
105
  get id(): string;
63
106
  get name(): string;
@@ -67,6 +110,7 @@ declare class ReactiveChannelImpl {
67
110
  get channelName(): string | null;
68
111
  get isReadOnly(): boolean;
69
112
  get linkAccess(): import("@rool-dev/sdk").LinkAccess;
113
+ get appUrl(): string | null;
70
114
  close(): void;
71
115
  getObject(...args: Parameters<RoolChannel['getObject']>): Promise<RoolObject | undefined>;
72
116
  stat(...args: Parameters<RoolChannel['stat']>): import("@rool-dev/sdk").RoolObjectStat | undefined;
@@ -100,6 +144,9 @@ declare class ReactiveChannelImpl {
100
144
  getInteractions(): Interaction[];
101
145
  getSystemInstruction(): string | undefined;
102
146
  setSystemInstruction(...args: Parameters<RoolChannel['setSystemInstruction']>): Promise<void>;
147
+ getConversations(): ConversationInfo[];
148
+ deleteConversation(...args: Parameters<RoolChannel['deleteConversation']>): Promise<void>;
149
+ renameConversation(...args: Parameters<RoolChannel['renameConversation']>): Promise<void>;
103
150
  getSchema(): import("@rool-dev/sdk").SpaceSchema;
104
151
  createCollection(...args: Parameters<RoolChannel['createCollection']>): Promise<import("@rool-dev/sdk").CollectionDef>;
105
152
  alterCollection(...args: Parameters<RoolChannel['alterCollection']>): Promise<import("@rool-dev/sdk").CollectionDef>;
@@ -109,6 +156,7 @@ declare class ReactiveChannelImpl {
109
156
  deleteMedia(...args: Parameters<RoolChannel['deleteMedia']>): Promise<void>;
110
157
  listMedia(): Promise<import("@rool-dev/sdk").MediaInfo[]>;
111
158
  rename(...args: Parameters<RoolChannel['rename']>): Promise<void>;
159
+ conversation(conversationId: string): ReactiveConversationHandle;
112
160
  on(...args: Parameters<RoolChannel['on']>): () => void;
113
161
  off(...args: Parameters<RoolChannel['off']>): void;
114
162
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"channel.svelte.d.ts","sourceRoot":"","sources":["../src/channel.svelte.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"channel.svelte.d.ts","sourceRoot":"","sources":["../src/channel.svelte.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAsB,WAAW,EAAE,gBAAgB,EAAE,kBAAkB,EAA4B,MAAM,eAAe,CAAC;AAEvL;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,gGAAgG;IAChG,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gCAAgC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;CACxB;AAGD;;GAEG;AACH,cAAM,iBAAiB;;IAOrB,OAAO,eAA4B;IACnC,OAAO,UAAgB;gBAEX,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY;IAoFvD;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB9B;;OAEG;IACH,KAAK,IAAI,IAAI;CAId;AAED,MAAM,MAAM,aAAa,GAAG,iBAAiB,CAAC;AAE9C;;GAEG;AACH,cAAM,kBAAkB;;IAMtB,IAAI,yBAA6C;IACjD,OAAO,UAAgB;gBAEX,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM;IA2ClD;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAS9B;;OAEG;IACH,KAAK,IAAI,IAAI;CAId;AAED,MAAM,MAAM,cAAc,GAAG,kBAAkB,CAAC;AAMhD;;;;;GAKG;AACH,cAAM,8BAA8B;;IAMlC,YAAY,gBAA6B;gBAE7B,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM;IAwBxD,IAAI,cAAc,IAAI,MAAM,CAAiC;IAG7D,eAAe;IACf,oBAAoB;IACpB,oBAAoB,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,kBAAkB,CAAC,sBAAsB,CAAC,CAAC;IACpF,MAAM,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAGxD,WAAW,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;;;;IAClE,YAAY,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;;;;IACpE,YAAY,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;;;;IACpE,aAAa,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;IAGtE,MAAM,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;;;;IAGxD,gBAAgB,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,CAAC;IAC5E,eAAe,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,CAAC;IAC1E,cAAc,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;IAGxE,WAAW,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;IAElE;;OAEG;IACH,KAAK,IAAI,IAAI;CAId;AAED,MAAM,MAAM,0BAA0B,GAAG,8BAA8B,CAAC;AAExE;;;GAGG;AACH,cAAM,mBAAmB;;IAMvB,YAAY,gBAA6B;IACzC,SAAS,WAAwB;IACjC,WAAW,WAAwB;IACnC,aAAa,qBAAkC;gBAEnC,OAAO,EAAE,WAAW;IAgDhC,IAAI,EAAE,WAA+B;IACrC,IAAI,IAAI,WAAiC;IACzC,IAAI,IAAI,yCAAiC;IACzC,IAAI,MAAM,WAAmC;IAC7C,IAAI,SAAS,WAAsC;IACnD,IAAI,WAAW,kBAAwC;IACvD,IAAI,UAAU,YAAuC;IACrD,IAAI,UAAU,uCAAuC;IACrD,IAAI,MAAM,kBAAmC;IAG7C,KAAK;IAQL,SAAS,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IACvD,IAAI,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAC7C,WAAW,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;;;;IAC3D,YAAY,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;IAC7D,YAAY,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;;;;IAC7D,YAAY,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;;;;IAC7D,aAAa,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;IAG/D,MAAM,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;;;;IAGjD,UAAU,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IACzD,OAAO;IACP,OAAO;IACP,IAAI;IACJ,IAAI;IACJ,YAAY;IAGZ,WAAW,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;IAC3D,WAAW,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;IAC3D,cAAc;IAGd,eAAe;IACf,oBAAoB;IACpB,oBAAoB,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;IAC7E,gBAAgB;IAChB,kBAAkB,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;IACzE,kBAAkB,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;IAGzE,SAAS;IACT,gBAAgB,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;IACrE,eAAe,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;IACnE,cAAc,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;IAGjE,WAAW,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;IAC3D,UAAU,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IACzD,WAAW,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;IAC3D,SAAS;IAGT,MAAM,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAGjD,YAAY,CAAC,cAAc,EAAE,MAAM,GAAG,0BAA0B;IAMhE,EAAE,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACzC,GAAG,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAI3C;;;OAGG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc;IAKxC;;;OAGG;IACH,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,aAAa;CAK5C;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,eAAe,CAEjE;AAED,MAAM,MAAM,eAAe,GAAG,mBAAmB,CAAC;AAElD;;GAEG;AACH,cAAM,uBAAuB;;IAM3B,IAAI,gBAA6B;IACjC,OAAO,UAAgB;gBAEX,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM;IAmC/C;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAU9B;;OAEG;IACH,KAAK,IAAI,IAAI;CAId;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,GAAG,mBAAmB,CAE1F;AAED,MAAM,MAAM,mBAAmB,GAAG,uBAAuB,CAAC"}
@@ -187,6 +187,69 @@ class ReactiveObjectImpl {
187
187
  this.#unsubscribers.length = 0;
188
188
  }
189
189
  }
190
+ // ---------------------------------------------------------------------------
191
+ // ReactiveConversationHandle
192
+ // ---------------------------------------------------------------------------
193
+ /**
194
+ * A reactive conversation handle that auto-updates interactions when the
195
+ * conversation changes. Wraps the SDK's ConversationHandle with $state.
196
+ *
197
+ * Call `close()` when done to stop listening for updates.
198
+ */
199
+ class ReactiveConversationHandleImpl {
200
+ #handle;
201
+ #conversationId;
202
+ #unsubscribers = [];
203
+ // Reactive state
204
+ interactions = $state([]);
205
+ constructor(channel, conversationId) {
206
+ this.#conversationId = conversationId;
207
+ this.#handle = channel.conversation(conversationId);
208
+ // Initial load
209
+ this.interactions = this.#handle.getInteractions();
210
+ // Listen for updates to this conversation
211
+ const onConversationUpdated = (event) => {
212
+ if (event.conversationId === this.#conversationId) {
213
+ this.interactions = this.#handle.getInteractions();
214
+ }
215
+ };
216
+ channel.on('conversationUpdated', onConversationUpdated);
217
+ this.#unsubscribers.push(() => channel.off('conversationUpdated', onConversationUpdated));
218
+ // Handle full resets
219
+ const onReset = () => {
220
+ this.interactions = this.#handle.getInteractions();
221
+ };
222
+ channel.on('reset', onReset);
223
+ this.#unsubscribers.push(() => channel.off('reset', onReset));
224
+ }
225
+ get conversationId() { return this.#conversationId; }
226
+ // Conversation history
227
+ getInteractions() { return this.#handle.getInteractions(); }
228
+ getSystemInstruction() { return this.#handle.getSystemInstruction(); }
229
+ setSystemInstruction(...args) { return this.#handle.setSystemInstruction(...args); }
230
+ rename(...args) { return this.#handle.rename(...args); }
231
+ // Object operations
232
+ findObjects(...args) { return this.#handle.findObjects(...args); }
233
+ createObject(...args) { return this.#handle.createObject(...args); }
234
+ updateObject(...args) { return this.#handle.updateObject(...args); }
235
+ deleteObjects(...args) { return this.#handle.deleteObjects(...args); }
236
+ // AI
237
+ prompt(...args) { return this.#handle.prompt(...args); }
238
+ // Schema
239
+ createCollection(...args) { return this.#handle.createCollection(...args); }
240
+ alterCollection(...args) { return this.#handle.alterCollection(...args); }
241
+ dropCollection(...args) { return this.#handle.dropCollection(...args); }
242
+ // Metadata
243
+ setMetadata(...args) { return this.#handle.setMetadata(...args); }
244
+ /**
245
+ * Stop listening for updates and clean up.
246
+ */
247
+ close() {
248
+ for (const unsub of this.#unsubscribers)
249
+ unsub();
250
+ this.#unsubscribers.length = 0;
251
+ }
252
+ }
190
253
  /**
191
254
  * Minimal wrapper that adds reactive `interactions` to RoolChannel.
192
255
  * All other properties and methods are proxied to the underlying channel.
@@ -199,17 +262,25 @@ class ReactiveChannelImpl {
199
262
  interactions = $state([]);
200
263
  objectIds = $state([]);
201
264
  collections = $state([]);
265
+ conversations = $state([]);
202
266
  constructor(channel) {
203
267
  this.#channel = channel;
204
268
  this.interactions = channel.getInteractions();
205
269
  this.objectIds = channel.getObjectIds();
206
270
  this.collections = Object.keys(channel.getSchema());
207
- // Subscribe to channel updates
271
+ this.conversations = channel.getConversations();
272
+ // Subscribe to channel updates → refresh interactions
208
273
  const onChannelUpdated = () => {
209
274
  this.interactions = channel.getInteractions();
210
275
  };
211
276
  channel.on('channelUpdated', onChannelUpdated);
212
277
  this.#unsubscribers.push(() => channel.off('channelUpdated', onChannelUpdated));
278
+ // Subscribe to conversation updates → refresh conversations
279
+ const onConversationUpdated = () => {
280
+ this.conversations = channel.getConversations();
281
+ };
282
+ channel.on('conversationUpdated', onConversationUpdated);
283
+ this.#unsubscribers.push(() => channel.off('conversationUpdated', onConversationUpdated));
213
284
  // Subscribe to object events for objectIds
214
285
  const refreshObjectIds = () => {
215
286
  this.objectIds = channel.getObjectIds();
@@ -228,6 +299,7 @@ class ReactiveChannelImpl {
228
299
  this.interactions = channel.getInteractions();
229
300
  this.objectIds = channel.getObjectIds();
230
301
  this.collections = Object.keys(channel.getSchema());
302
+ this.conversations = channel.getConversations();
231
303
  };
232
304
  channel.on('reset', onReset);
233
305
  this.#unsubscribers.push(() => channel.off('reset', onReset));
@@ -241,6 +313,7 @@ class ReactiveChannelImpl {
241
313
  get channelName() { return this.#channel.channelName; }
242
314
  get isReadOnly() { return this.#channel.isReadOnly; }
243
315
  get linkAccess() { return this.#channel.linkAccess; }
316
+ get appUrl() { return this.#channel.appUrl; }
244
317
  // Proxy all methods
245
318
  close() {
246
319
  this.#closed = true;
@@ -274,6 +347,9 @@ class ReactiveChannelImpl {
274
347
  getInteractions() { return this.#channel.getInteractions(); }
275
348
  getSystemInstruction() { return this.#channel.getSystemInstruction(); }
276
349
  setSystemInstruction(...args) { return this.#channel.setSystemInstruction(...args); }
350
+ getConversations() { return this.#channel.getConversations(); }
351
+ deleteConversation(...args) { return this.#channel.deleteConversation(...args); }
352
+ renameConversation(...args) { return this.#channel.renameConversation(...args); }
277
353
  // Schema
278
354
  getSchema() { return this.#channel.getSchema(); }
279
355
  createCollection(...args) { return this.#channel.createCollection(...args); }
@@ -286,6 +362,12 @@ class ReactiveChannelImpl {
286
362
  listMedia() { return this.#channel.listMedia(); }
287
363
  // Channel admin
288
364
  rename(...args) { return this.#channel.rename(...args); }
365
+ // Conversations
366
+ conversation(conversationId) {
367
+ if (this.#closed)
368
+ throw new Error('Cannot create reactive conversation: channel is closed');
369
+ return new ReactiveConversationHandleImpl(this.#channel, conversationId);
370
+ }
289
371
  // Events
290
372
  on(...args) { return this.#channel.on(...args); }
291
373
  off(...args) { return this.#channel.off(...args); }
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  export { createRool, generateId } from './rool.svelte.js';
2
2
  export { wrapChannel } from './channel.svelte.js';
3
3
  export type { Rool } from './rool.svelte.js';
4
- export type { ReactiveChannel, ReactiveObject, ReactiveWatch, ReactiveChannelList, WatchOptions } from './channel.svelte.js';
5
- export type { RoolClientConfig, RoolChannel, RoolSpace, RoolSpaceInfo, RoolObject, RoolObjectStat, RoolUserRole, ConnectionState, ChannelInfo, CurrentUser, Interaction, FindObjectsOptions, PromptOptions, CreateObjectOptions, UpdateObjectOptions, FieldType, FieldDef, CollectionDef, SpaceSchema, SpaceMember, UserResult, RoolClient, } from '@rool-dev/sdk';
4
+ export type { ReactiveChannel, ReactiveConversationHandle, ReactiveObject, ReactiveWatch, ReactiveChannelList, WatchOptions } from './channel.svelte.js';
5
+ export type { RoolClientConfig, RoolChannel, RoolSpace, RoolSpaceInfo, RoolObject, RoolObjectStat, RoolUserRole, ConnectionState, ChannelInfo, Conversation, ConversationInfo, CurrentUser, Interaction, FindObjectsOptions, PromptOptions, CreateObjectOptions, UpdateObjectOptions, FieldType, FieldDef, CollectionDef, SpaceSchema, SpaceMember, UserResult, RoolClient, PublishedAppInfo, PublishAppOptions, AppManifest, FindAppsOptions, } from '@rool-dev/sdk';
6
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG1D,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGlD,YAAY,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC7C,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAG7H,YAAY,EACV,gBAAgB,EAChB,WAAW,EACX,SAAS,EACT,aAAa,EACb,UAAU,EACV,cAAc,EACd,YAAY,EACZ,eAAe,EACf,WAAW,EACX,WAAW,EACX,WAAW,EACX,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACnB,mBAAmB,EACnB,SAAS,EACT,QAAQ,EACR,aAAa,EACb,WAAW,EACX,WAAW,EACX,UAAU,EACV,UAAU,GACX,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG1D,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGlD,YAAY,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC7C,YAAY,EAAE,eAAe,EAAE,0BAA0B,EAAE,cAAc,EAAE,aAAa,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGzJ,YAAY,EACV,gBAAgB,EAChB,WAAW,EACX,SAAS,EACT,aAAa,EACb,UAAU,EACV,cAAc,EACd,YAAY,EACZ,eAAe,EACf,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACnB,mBAAmB,EACnB,SAAS,EACT,QAAQ,EACR,aAAa,EACb,WAAW,EACX,WAAW,EACX,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,EACX,eAAe,GAChB,MAAM,eAAe,CAAC"}
@@ -1,4 +1,4 @@
1
- import { RoolClient, type RoolSpace, type RoolSpaceInfo, type ConnectionState, type RoolClientConfig, type CurrentUser } from '@rool-dev/sdk';
1
+ import { RoolClient, type RoolSpace, type RoolSpaceInfo, type ConnectionState, type RoolClientConfig, type CurrentUser, type FindAppsOptions, type PublishedAppInfo, type PublishAppOptions } from '@rool-dev/sdk';
2
2
  import { type ReactiveChannel, type ReactiveChannelList } from './channel.svelte.js';
3
3
  /**
4
4
  * Rool client with reactive state for Svelte 5.
@@ -90,6 +90,33 @@ declare class RoolImpl {
90
90
  * Delete a channel from a space.
91
91
  */
92
92
  deleteChannel(spaceId: string, channelId: string): Promise<void>;
93
+ /**
94
+ * Search for public apps. With a query, performs semantic search.
95
+ * Without a query, returns all public apps sorted by most recently updated.
96
+ */
97
+ findApps(options?: FindAppsOptions): Promise<PublishedAppInfo[]>;
98
+ /**
99
+ * Install an app into a space.
100
+ * Creates/updates a channel with the app's manifest settings.
101
+ * Returns the channel ID.
102
+ */
103
+ installApp(spaceId: string, appId: string, channelId?: string): Promise<string>;
104
+ /**
105
+ * Publish or update an app.
106
+ */
107
+ publishApp(appId: string, options: PublishAppOptions): Promise<PublishedAppInfo>;
108
+ /**
109
+ * Unpublish an app.
110
+ */
111
+ unpublishApp(appId: string): Promise<void>;
112
+ /**
113
+ * List the current user's published apps.
114
+ */
115
+ listApps(): Promise<PublishedAppInfo[]>;
116
+ /**
117
+ * Get info for a specific published app.
118
+ */
119
+ getAppInfo(appId: string): Promise<PublishedAppInfo | null>;
93
120
  /**
94
121
  * Create a reactive channel list for a space.
95
122
  * Auto-updates when channels are created, renamed, or deleted.
@@ -1 +1 @@
1
- {"version":3,"file":"rool.svelte.d.ts","sourceRoot":"","sources":["../src/rool.svelte.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,KAAK,eAAe,EAAE,KAAK,gBAAgB,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAC9I,OAAO,EAAkC,KAAK,eAAe,EAAE,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAErH;;;;;;;;GAQG;AACH,cAAM,QAAQ;;IAMZ,aAAa,iBAAgC;IAC7C,MAAM,8BAAkD;IACxD,aAAa,UAAiB;IAC9B,WAAW,eAA8B;IACzC,eAAe,kBAA2C;IAC1D,WAAW,0BAAuC;IAClD,WAAW,qBAAoC;gBAEnC,MAAM,CAAC,EAAE,gBAAgB;IAKrC;;;OAGG;IACH,IAAI,MAAM,IAAI,UAAU,CAEvB;IAwDD;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;IAW9B;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI5B;;OAEG;IACH,MAAM,IAAI,IAAI;IAQd;;;OAGG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAO/E;;;OAGG;IACH,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAI9C;;;OAGG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAI7C;;OAEG;IACH,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3C;;;OAGG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAKjD;;OAEG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM;IAIxB;;;OAGG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC;IAI9D;;OAEG;IACH,IAAI,QAAQ,qCAEX;IAED;;OAEG;IACH,cAAc;IAId;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9E;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhE;;;;OAIG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,mBAAmB;IAI9C;;OAEG;IACH,OAAO,IAAI,IAAI;CAahB;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAE1D;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,MAAM,MAAM,IAAI,GAAG,QAAQ,CAAC"}
1
+ {"version":3,"file":"rool.svelte.d.ts","sourceRoot":"","sources":["../src/rool.svelte.ts"],"names":[],"mappings":"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"}
@@ -194,6 +194,45 @@ class RoolImpl {
194
194
  deleteChannel(spaceId, channelId) {
195
195
  return this.#client.deleteChannel(spaceId, channelId);
196
196
  }
197
+ /**
198
+ * Search for public apps. With a query, performs semantic search.
199
+ * Without a query, returns all public apps sorted by most recently updated.
200
+ */
201
+ findApps(options) {
202
+ return this.#client.findApps(options);
203
+ }
204
+ /**
205
+ * Install an app into a space.
206
+ * Creates/updates a channel with the app's manifest settings.
207
+ * Returns the channel ID.
208
+ */
209
+ installApp(spaceId, appId, channelId) {
210
+ return this.#client.installApp(spaceId, appId, channelId);
211
+ }
212
+ /**
213
+ * Publish or update an app.
214
+ */
215
+ publishApp(appId, options) {
216
+ return this.#client.publishApp(appId, options);
217
+ }
218
+ /**
219
+ * Unpublish an app.
220
+ */
221
+ unpublishApp(appId) {
222
+ return this.#client.unpublishApp(appId);
223
+ }
224
+ /**
225
+ * List the current user's published apps.
226
+ */
227
+ listApps() {
228
+ return this.#client.listApps();
229
+ }
230
+ /**
231
+ * Get info for a specific published app.
232
+ */
233
+ getAppInfo(appId) {
234
+ return this.#client.getAppInfo(appId);
235
+ }
197
236
  /**
198
237
  * Create a reactive channel list for a space.
199
238
  * Auto-updates when channels are created, renamed, or deleted.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rool-dev/svelte",
3
- "version": "0.3.1-dev.fa375c5",
3
+ "version": "0.3.2-dev.1f10ef1",
4
4
  "description": "Svelte 5 runes for Rool Spaces",
5
5
  "type": "module",
6
6
  "svelte": "./dist/index.js",
@@ -41,15 +41,15 @@
41
41
  },
42
42
  "license": "MIT",
43
43
  "dependencies": {
44
- "@rool-dev/sdk": "0.3.1-dev.fa375c5"
44
+ "@rool-dev/sdk": "0.3.2-dev.1f10ef1"
45
45
  },
46
46
  "peerDependencies": {
47
47
  "svelte": "^5.0.0"
48
48
  },
49
49
  "devDependencies": {
50
- "@sveltejs/package": "^2.0.0",
51
- "svelte": "^5.0.0",
52
- "svelte-check": "^4.0.0",
50
+ "@sveltejs/package": "^2.5.7",
51
+ "svelte": "^5.54.0",
52
+ "svelte-check": "^4.4.5",
53
53
  "typescript": "^5.9.3"
54
54
  },
55
55
  "scripts": {