@rool-dev/svelte 0.11.8 → 0.11.9-dev.38b242c

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
@@ -447,53 +447,26 @@ isObjectPath('/space/article/welcome.json'); // true
447
447
  generateId(); // unique ID suitable for conversation IDs
448
448
  ```
449
449
 
450
- ## Exported Types
450
+ ## Exports
451
451
 
452
452
  ```typescript
453
453
  // Package types
454
454
  import type { Rool, ReactiveSpace, ReactiveConversationHandle, ReactiveObject, ReactiveWatch, WatchOptions, ReactiveFileTree, ReactiveFileNode, ReactiveFileRoot, ReactiveFileTreeEvent, ReactiveFileTreeSyncResult } from '@rool-dev/svelte';
455
+ ```
456
+
457
+ The SDK's entire public API is also re-exported, so apps never need a direct
458
+ `@rool-dev/sdk` dependency — classes and helpers as well as every SDK type:
455
459
 
456
- // Re-exported from @rool-dev/sdk
457
- import type {
458
- RoolClient,
459
- RoolClientConfig,
460
- RoolSpace,
461
- RoolSpaceInfo,
462
- RoolObject,
463
- GetObjectsResult,
464
- RoolObjectStat,
465
- RoolUserRole,
466
- ConnectionState,
467
- Conversation,
468
- ConversationInfo,
469
- CurrentUser,
470
- Interaction,
471
- PromptOptions,
472
- PromptAttachment,
473
- UpdateObjectOptions,
474
- MoveObjectOptions,
475
- CollectionOptions,
476
- FieldType,
477
- FieldDef,
478
- CollectionDef,
479
- SpaceSchema,
480
- SpaceMember,
481
- InviteRole,
482
- InviteEmailStatus,
483
- SpaceInvite,
484
- SpaceInviteCreated,
485
- InvitePreview,
486
- InviteRedeemResult,
487
- SpaceFileStorageUsage,
488
- RoolSpaceEvents,
489
- WebDAVDepth,
490
- WebDAVSyncLevel,
491
- WebDAVPropName,
492
- WebDAVResponse,
493
- WebDAVProps,
494
- } from '@rool-dev/svelte';
460
+ ```typescript
461
+ import { NativePkceAuthProvider, InviteError, WebDAVError, machinePath } from '@rool-dev/svelte';
462
+ import type { RoolObject, PromptOptions, Interaction, SpaceSchema } from '@rool-dev/svelte';
495
463
  ```
496
464
 
465
+ See the [SDK documentation](../sdk/README.md) for the full API. The one
466
+ exception is the Node auth provider: import it from `@rool-dev/sdk/node`,
467
+ which stays a separate entry point so Node-only dependencies never reach
468
+ browser bundles.
469
+
497
470
  ## License
498
471
 
499
472
  MIT - see [LICENSE](../../LICENSE) for details.
package/dist/index.d.ts CHANGED
@@ -1,12 +1,9 @@
1
1
  export { createRool, generateId } from './rool.svelte.js';
2
- export { isObjectPath, machinePath, machineUri } from '@rool-dev/sdk';
3
- export { InviteError } from '@rool-dev/sdk';
4
- export type { InviteErrorCode } from '@rool-dev/sdk';
5
2
  export { wrapSpace } from './space.svelte.js';
6
3
  export { ReactiveFileTree } from './file-tree.svelte.js';
7
4
  export type { Rool } from './rool.svelte.js';
8
5
  export type { ReactiveConversationHandle, ReactiveObject, ReactiveWatch, WatchOptions } from './space-session.svelte.js';
9
6
  export type { ReactiveSpace } from './space.svelte.js';
10
7
  export type { ReactiveFileNode, ReactiveFilePath, ReactiveFileRoot, ReactiveFileTreeEvent, ReactiveFileTreeSyncResult } from './file-tree.svelte.js';
11
- export type { RoolClientConfig, RoolSpace, RoolSpaceInfo, RoolObject, GetObjectsResult, RoolObjectStat, RoolUserRole, ConnectionState, ConversationInfo, Conversation, CurrentUser, Interaction, PromptOptions, PromptAttachment, UpdateObjectOptions, MoveObjectOptions, CollectionOptions, FieldType, FieldDef, CollectionDef, SpaceSchema, SpaceMember, InviteRole, SpaceInvite, SpaceInviteCreated, InviteEmailStatus, InvitePreview, InviteRedeemResult, RoolClient, RoolSpaceEvents, SpaceFileStorageUsage, WebDAVDepth, WebDAVSyncLevel, WebDAVPropName, WebDAVResponse, WebDAVProps, } from '@rool-dev/sdk';
8
+ export * from '@rool-dev/sdk';
12
9
  //# 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,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAGtE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGrD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAGzD,YAAY,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC7C,YAAY,EAAE,0BAA0B,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzH,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AAGrJ,YAAY,EACV,gBAAgB,EAChB,SAAS,EACT,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EACjB,SAAS,EACT,QAAQ,EACR,aAAa,EACb,WAAW,EACX,WAAW,EACX,UAAU,EACV,WAAW,EACX,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,kBAAkB,EAClB,UAAU,EACV,eAAe,EACf,qBAAqB,EACrB,WAAW,EACX,eAAe,EACf,cAAc,EACd,cAAc,EACd,WAAW,GACZ,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,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAGzD,YAAY,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC7C,YAAY,EAAE,0BAA0B,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzH,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AAIrJ,cAAc,eAAe,CAAC"}
package/dist/index.js CHANGED
@@ -1,9 +1,8 @@
1
1
  // Main export
2
2
  export { createRool, generateId } from './rool.svelte.js';
3
- // Machine path helpers — re-exported from the SDK for convenience
4
- export { isObjectPath, machinePath, machineUri } from '@rool-dev/sdk';
5
- // Invite error — re-exported so apps can match on it without a direct SDK dep
6
- export { InviteError } from '@rool-dev/sdk';
7
3
  // Reactive wrappers
8
4
  export { wrapSpace } from './space.svelte.js';
9
5
  export { ReactiveFileTree } from './file-tree.svelte.js';
6
+ // The SDK's entire public API (classes, helpers, errors, and types) is
7
+ // re-exported so apps never need a direct @rool-dev/sdk dependency.
8
+ export * from '@rool-dev/sdk';
@@ -1 +1 @@
1
- {"version":3,"file":"rool.svelte.d.ts","sourceRoot":"","sources":["../src/rool.svelte.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rool.svelte.d.ts","sourceRoot":"","sources":["../src/rool.svelte.ts"],"names":[],"mappings":"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"}
@@ -163,6 +163,7 @@ class RoolImpl {
163
163
  async openSpace(spaceId) {
164
164
  const raw = await this.#client.openSpace(spaceId);
165
165
  const reactive = wrapSpace(raw);
166
+ await reactive.ready();
166
167
  this.#openSpaces.add(reactive);
167
168
  return reactive;
168
169
  }
@@ -172,6 +173,7 @@ class RoolImpl {
172
173
  async createSpace(name) {
173
174
  const raw = await this.#client.createSpace(name);
174
175
  const reactive = wrapSpace(raw);
176
+ await reactive.ready();
175
177
  this.#openSpaces.add(reactive);
176
178
  return reactive;
177
179
  }
@@ -181,6 +183,7 @@ class RoolImpl {
181
183
  async duplicateSpace(sourceSpaceId, name) {
182
184
  const raw = await this.#client.duplicateSpace(sourceSpaceId, name);
183
185
  const reactive = wrapSpace(raw);
186
+ await reactive.ready();
184
187
  this.#openSpaces.add(reactive);
185
188
  return reactive;
186
189
  }
@@ -257,6 +260,7 @@ class RoolImpl {
257
260
  async importArchive(name, archive) {
258
261
  const raw = await this.#client.importArchive(name, archive);
259
262
  const reactive = wrapSpace(raw);
263
+ await reactive.ready();
260
264
  this.#openSpaces.add(reactive);
261
265
  return reactive;
262
266
  }
@@ -52,30 +52,12 @@ export declare class ReactiveConversationHandleImpl {
52
52
  setSystemInstruction(...args: Parameters<ConversationHandle['setSystemInstruction']>): Promise<void>;
53
53
  rename(...args: Parameters<ConversationHandle['rename']>): Promise<void>;
54
54
  delete(): Promise<void>;
55
- putObject(...args: Parameters<ConversationHandle['putObject']>): Promise<{
56
- object: RoolObject;
57
- message: string;
58
- }>;
59
- patchObject(...args: Parameters<ConversationHandle['patchObject']>): Promise<{
60
- object: RoolObject;
61
- message: string;
62
- }>;
63
- moveObject(...args: Parameters<ConversationHandle['moveObject']>): Promise<{
64
- object: RoolObject;
65
- message: string;
66
- }>;
67
- deleteObjects(...args: Parameters<ConversationHandle['deleteObjects']>): Promise<void>;
68
- /** @deprecated Use deleteObjects instead. */
69
- deletePaths(...args: Parameters<ConversationHandle['deletePaths']>): Promise<void>;
70
55
  prompt(...args: Parameters<ConversationHandle['prompt']>): Promise<{
71
56
  message: string;
72
57
  objects: RoolObject[];
58
+ creditsUsed: number;
73
59
  }>;
74
60
  stop(): Promise<boolean>;
75
- createCollection(...args: Parameters<ConversationHandle['createCollection']>): Promise<import("@rool-dev/sdk").CollectionDef>;
76
- alterCollection(...args: Parameters<ConversationHandle['alterCollection']>): Promise<import("@rool-dev/sdk").CollectionDef>;
77
- dropCollection(...args: Parameters<ConversationHandle['dropCollection']>): Promise<void>;
78
- setMetadata(...args: Parameters<ConversationHandle['setMetadata']>): void;
79
61
  close(): void;
80
62
  }
81
63
  export type ReactiveConversationHandle = ReactiveConversationHandleImpl;
@@ -1 +1 @@
1
- {"version":3,"file":"space-session.svelte.d.ts","sourceRoot":"","sources":["../src/space-session.svelte.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,SAAS,EACT,WAAW,EACX,UAAU,EACV,kBAAkB,EAEnB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,gBAAgB,EAAqD,MAAM,uBAAuB,CAAC;AAE5G;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,iCAAiC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gCAAgC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;CACxB;AA8CD;;GAEG;AACH,qBAAa,iBAAiB;;IAO5B,OAAO,eAA4B;IACnC,OAAO,UAAgB;gBAEX,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,gBAAgB,EAAE,OAAO,EAAE,YAAY;IAgB/E,yEAAyE;IACnE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAS9B,KAAK,IAAI,IAAI;CAId;AAED,MAAM,MAAM,aAAa,GAAG,iBAAiB,CAAC;AAE9C;;GAEG;AACH,qBAAa,kBAAkB;;IAO7B,IAAI,yBAA6C;IACjD,OAAO,UAAgB;gBAEX,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM;IAoBhE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAS9B,KAAK,IAAI,IAAI;CAId;AAED,MAAM,MAAM,cAAc,GAAG,kBAAkB,CAAC;AAMhD,qBAAa,8BAA8B;;IAMzC,YAAY,gBAA6B;gBAE7B,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM;IAqBpD,IAAI,cAAc,IAAI,MAAM,CAAiC;IAG7D,eAAe;IACf,OAAO;IACP,IAAI,YAAY,uBAAwC;IACxD,aAAa,CAAC,aAAa,EAAE,MAAM;IACnC,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;IACxD,MAAM;IAGN,SAAS,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;;;;IAC9D,WAAW,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;;;;IAClE,UAAU,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;;;;IAChE,aAAa,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;IACtE,6CAA6C;IAC7C,WAAW,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;IAGlE,MAAM,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;;;;IACxD,IAAI;IAGJ,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,KAAK,IAAI,IAAI;CAId;AAED,MAAM,MAAM,0BAA0B,GAAG,8BAA8B,CAAC"}
1
+ {"version":3,"file":"space-session.svelte.d.ts","sourceRoot":"","sources":["../src/space-session.svelte.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,SAAS,EACT,WAAW,EACX,UAAU,EACV,kBAAkB,EAEnB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,gBAAgB,EAAqD,MAAM,uBAAuB,CAAC;AAE5G;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,iCAAiC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gCAAgC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;CACxB;AA8CD;;GAEG;AACH,qBAAa,iBAAiB;;IAO5B,OAAO,eAA4B;IACnC,OAAO,UAAgB;gBAEX,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,gBAAgB,EAAE,OAAO,EAAE,YAAY;IAgB/E,yEAAyE;IACnE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAS9B,KAAK,IAAI,IAAI;CAId;AAED,MAAM,MAAM,aAAa,GAAG,iBAAiB,CAAC;AAE9C;;GAEG;AACH,qBAAa,kBAAkB;;IAO7B,IAAI,yBAA6C;IACjD,OAAO,UAAgB;gBAEX,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM;IAoBhE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAS9B,KAAK,IAAI,IAAI;CAId;AAED,MAAM,MAAM,cAAc,GAAG,kBAAkB,CAAC;AAMhD,qBAAa,8BAA8B;;IAMzC,YAAY,gBAA6B;gBAE7B,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM;IAiCpD,IAAI,cAAc,IAAI,MAAM,CAAiC;IAG7D,eAAe;IACf,OAAO;IACP,IAAI,YAAY,uBAAwC;IACxD,aAAa,CAAC,aAAa,EAAE,MAAM;IAInC,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;IACxD,MAAM;IAGN,MAAM,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;;;;;IACxD,IAAI;IAEJ,KAAK,IAAI,IAAI;CAId;AAED,MAAM,MAAM,0BAA0B,GAAG,8BAA8B,CAAC"}
@@ -143,16 +143,31 @@ export class ReactiveConversationHandleImpl {
143
143
  constructor(space, conversationId) {
144
144
  this.#conversationId = conversationId;
145
145
  this.#handle = space.conversation(conversationId);
146
- this.interactions = this.#handle.getInteractions();
147
- const onConversationUpdated = (event) => {
148
- if (event.conversationId === this.#conversationId) {
146
+ // Cold-open: fetch the conversation contents if not already loaded (SSE may
147
+ // have filled it if this conversation received a recent event).
148
+ if (this.#handle.loaded) {
149
+ this.interactions = this.#handle.getInteractions();
150
+ }
151
+ else {
152
+ void this.#handle.load().then(() => {
149
153
  this.interactions = this.#handle.getInteractions();
150
- }
154
+ });
155
+ }
156
+ const onConversationUpdated = (event) => {
157
+ if (event.conversationId !== this.#conversationId)
158
+ return;
159
+ this.#handle.applyUpdate(event.conversation);
160
+ this.interactions = this.#handle.getInteractions();
151
161
  };
152
162
  space.on('conversationUpdated', onConversationUpdated);
153
163
  this.#unsubscribers.push(() => space.off('conversationUpdated', onConversationUpdated));
164
+ // Reconnect reset: force-reload the conversation (we may have missed SSE).
154
165
  const onReset = () => {
155
- this.interactions = this.#handle.getInteractions();
166
+ if (!this.#handle.loaded)
167
+ return;
168
+ void this.#handle.load(true).then(() => {
169
+ this.interactions = this.#handle.getInteractions();
170
+ });
156
171
  };
157
172
  space.on('reset', onReset);
158
173
  this.#unsubscribers.push(() => space.off('reset', onReset));
@@ -162,27 +177,17 @@ export class ReactiveConversationHandleImpl {
162
177
  getInteractions() { return this.#handle.getInteractions(); }
163
178
  getTree() { return this.#handle.getTree(); }
164
179
  get activeLeafId() { return this.#handle.activeLeafId; }
165
- setActiveLeaf(interactionId) { this.#handle.setActiveLeaf(interactionId); }
180
+ setActiveLeaf(interactionId) {
181
+ this.#handle.setActiveLeaf(interactionId);
182
+ this.interactions = this.#handle.getInteractions();
183
+ }
166
184
  getSystemInstruction() { return this.#handle.getSystemInstruction(); }
167
185
  setSystemInstruction(...args) { return this.#handle.setSystemInstruction(...args); }
168
186
  rename(...args) { return this.#handle.rename(...args); }
169
187
  delete() { return this.#handle.delete(); }
170
- // Object operations
171
- putObject(...args) { return this.#handle.putObject(...args); }
172
- patchObject(...args) { return this.#handle.patchObject(...args); }
173
- moveObject(...args) { return this.#handle.moveObject(...args); }
174
- deleteObjects(...args) { return this.#handle.deleteObjects(...args); }
175
- /** @deprecated Use deleteObjects instead. */
176
- deletePaths(...args) { return this.#handle.deletePaths(...args); }
177
188
  // AI
178
189
  prompt(...args) { return this.#handle.prompt(...args); }
179
190
  stop() { return this.#handle.stop(); }
180
- // Schema
181
- createCollection(...args) { return this.#handle.createCollection(...args); }
182
- alterCollection(...args) { return this.#handle.alterCollection(...args); }
183
- dropCollection(...args) { return this.#handle.dropCollection(...args); }
184
- // Metadata
185
- setMetadata(...args) { return this.#handle.setMetadata(...args); }
186
191
  close() {
187
192
  for (const unsub of this.#unsubscribers)
188
193
  unsub();
@@ -1,16 +1,33 @@
1
- import type { RoolSpace, ConversationInfo, ConnectionState, RoolUserRole, SpaceMember } from '@rool-dev/sdk';
1
+ import type { RoolSpace, ConversationMeta, ConnectionState, RoolUserRole, SpaceMember, SpaceSchema } from '@rool-dev/sdk';
2
2
  import { ReactiveConversationHandleImpl, ReactiveObjectImpl, ReactiveWatchImpl, type WatchOptions } from './space-session.svelte.js';
3
3
  import { ReactiveFileTree } from './file-tree.svelte.js';
4
4
  /**
5
- * A reactive wrapper around a RoolSpace. Exposes reactive `conversations` and
6
- * `connectionState`, plus space-level object/conversation/AI methods.
5
+ * A reactive wrapper around a RoolSpace. Exposes reactive `conversations`,
6
+ * `connectionState`, `meta`, and `schema`, plus space-level
7
+ * object/conversation/AI methods.
8
+ *
9
+ * `meta` and `schema` are read from the WebDAV filesystem (`/space/.meta.json`,
10
+ * `/space/<collection>/.schema.json`) and re-fetched when the file tree reports
11
+ * those nodes changed — so remote writes propagate the same as local ones. The
12
+ * underlying SDK space holds no schema/meta state; this wrapper owns the
13
+ * reactive presentation of it.
7
14
  *
8
15
  * Lifecycle: call `close()` when done to stop the space's SSE subscription.
9
16
  */
10
17
  declare class ReactiveSpaceImpl {
11
18
  #private;
12
19
  connectionState: ConnectionState;
20
+ meta: Record<string, unknown>;
21
+ schema: SpaceSchema;
13
22
  constructor(space: RoolSpace);
23
+ /** Resolve when the initial meta/schema fetch has settled. */
24
+ ready(): Promise<void>;
25
+ /**
26
+ * Set one metadata key, merging into the reactive `meta` and writing the full
27
+ * blob to `/space/.meta.json`. A `null`/`undefined` value deletes the key.
28
+ * The file tree reconciles `meta` after the write lands.
29
+ */
30
+ setMeta(key: string, value: unknown): Promise<void>;
14
31
  get isClosed(): boolean;
15
32
  /** Get a reactive handle for a conversation in this space. */
16
33
  conversation(conversationId: string): ReactiveConversationHandleImpl;
@@ -18,7 +35,7 @@ declare class ReactiveSpaceImpl {
18
35
  * Close this space and stop the SSE subscription. Idempotent.
19
36
  */
20
37
  close(): void;
21
- get conversations(): ConversationInfo[];
38
+ get conversations(): ConversationMeta[];
22
39
  get id(): string;
23
40
  get name(): string;
24
41
  get role(): RoolUserRole;
@@ -27,9 +44,24 @@ declare class ReactiveSpaceImpl {
27
44
  get fileTree(): ReactiveFileTree;
28
45
  getObject(...args: Parameters<RoolSpace['getObject']>): Promise<import("@rool-dev/sdk").RoolObject | undefined>;
29
46
  getObjects(...args: Parameters<RoolSpace['getObjects']>): Promise<import("@rool-dev/sdk").GetObjectsResult>;
47
+ putObject(...args: Parameters<RoolSpace['putObject']>): Promise<{
48
+ object: import("@rool-dev/sdk").RoolObject;
49
+ message: string;
50
+ }>;
51
+ patchObject(...args: Parameters<RoolSpace['patchObject']>): Promise<{
52
+ object: import("@rool-dev/sdk").RoolObject;
53
+ message: string;
54
+ }>;
55
+ moveObject(...args: Parameters<RoolSpace['moveObject']>): Promise<{
56
+ object: import("@rool-dev/sdk").RoolObject;
57
+ message: string;
58
+ }>;
59
+ deleteObjects(...args: Parameters<RoolSpace['deleteObjects']>): Promise<void>;
60
+ createCollection(...args: Parameters<RoolSpace['createCollection']>): Promise<import("@rool-dev/sdk").CollectionDef>;
61
+ alterCollection(...args: Parameters<RoolSpace['alterCollection']>): Promise<import("@rool-dev/sdk").CollectionDef>;
62
+ dropCollection(...args: Parameters<RoolSpace['dropCollection']>): Promise<void>;
30
63
  object(path: string): ReactiveObjectImpl;
31
64
  watch(options: WatchOptions): ReactiveWatchImpl;
32
- stat(...args: Parameters<RoolSpace['stat']>): import("@rool-dev/sdk").RoolObjectStat | undefined;
33
65
  stopInteraction(...args: Parameters<RoolSpace['stopInteraction']>): Promise<boolean>;
34
66
  checkpoint(...args: Parameters<RoolSpace['checkpoint']>): Promise<string>;
35
67
  canUndo(...args: Parameters<RoolSpace['canUndo']>): Promise<boolean>;
@@ -37,11 +69,10 @@ declare class ReactiveSpaceImpl {
37
69
  undo(...args: Parameters<RoolSpace['undo']>): Promise<boolean>;
38
70
  redo(...args: Parameters<RoolSpace['redo']>): Promise<boolean>;
39
71
  clearHistory(...args: Parameters<RoolSpace['clearHistory']>): Promise<void>;
40
- getMetadata(...args: Parameters<RoolSpace['getMetadata']>): unknown;
41
- getAllMetadata(...args: Parameters<RoolSpace['getAllMetadata']>): Record<string, unknown>;
42
- getConversations(...args: Parameters<RoolSpace['getConversations']>): ConversationInfo[];
72
+ getConversations(...args: Parameters<RoolSpace['getConversations']>): ConversationMeta[];
43
73
  deleteConversation(...args: Parameters<RoolSpace['deleteConversation']>): Promise<void>;
44
- getSchema(...args: Parameters<RoolSpace['getSchema']>): import("@rool-dev/sdk").SpaceSchema;
74
+ /** Rename a conversation without acquiring a reactive handle (avoids an unnecessary content fetch). */
75
+ renameConversation(conversationId: string, name: string): Promise<void>;
45
76
  fetch(...args: Parameters<RoolSpace['fetch']>): Promise<Response>;
46
77
  getStorageUsage(...args: Parameters<RoolSpace['getStorageUsage']>): Promise<import("@rool-dev/sdk").SpaceFileStorageUsage>;
47
78
  fetchPath(...args: Parameters<RoolSpace['fetchPath']>): Promise<Response>;
@@ -1 +1 @@
1
- {"version":3,"file":"space.svelte.d.ts","sourceRoot":"","sources":["../src/space.svelte.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"space.svelte.d.ts","sourceRoot":"","sources":["../src/space.svelte.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,15 @@
1
1
  import { ReactiveConversationHandleImpl, ReactiveObjectImpl, ReactiveWatchImpl } from './space-session.svelte.js';
2
2
  import { ReactiveFileTree } from './file-tree.svelte.js';
3
3
  /**
4
- * A reactive wrapper around a RoolSpace. Exposes reactive `conversations` and
5
- * `connectionState`, plus space-level object/conversation/AI methods.
4
+ * A reactive wrapper around a RoolSpace. Exposes reactive `conversations`,
5
+ * `connectionState`, `meta`, and `schema`, plus space-level
6
+ * object/conversation/AI methods.
7
+ *
8
+ * `meta` and `schema` are read from the WebDAV filesystem (`/space/.meta.json`,
9
+ * `/space/<collection>/.schema.json`) and re-fetched when the file tree reports
10
+ * those nodes changed — so remote writes propagate the same as local ones. The
11
+ * underlying SDK space holds no schema/meta state; this wrapper owns the
12
+ * reactive presentation of it.
6
13
  *
7
14
  * Lifecycle: call `close()` when done to stop the space's SSE subscription.
8
15
  */
@@ -14,6 +21,13 @@ class ReactiveSpaceImpl {
14
21
  // Reactive state mirroring the underlying space
15
22
  #conversationList = $state([]);
16
23
  connectionState = $state('reconnecting');
24
+ // Reactive space content read from the WebDAV filesystem.
25
+ meta = $state({});
26
+ schema = $state({});
27
+ // Initial load promises, awaited by ready() so callers can open a space with
28
+ // meta/schema already populated (avoids a default-theme flash on switch).
29
+ #metaReady = Promise.resolve();
30
+ #schemaReady = Promise.resolve();
17
31
  constructor(space) {
18
32
  this.#space = space;
19
33
  this.#fileTree = new ReactiveFileTree(space);
@@ -28,6 +42,47 @@ class ReactiveSpaceImpl {
28
42
  };
29
43
  space.on('connectionStateChanged', onConnectionStateChanged);
30
44
  this.#unsubscribers.push(() => space.off('connectionStateChanged', onConnectionStateChanged));
45
+ // Seed meta/schema from the filesystem, and re-fetch the relevant one when
46
+ // the file tree reports its node changed. Remote writes (another tab, the
47
+ // agent) land here the same as local ones.
48
+ this.#metaReady = this.#refreshMeta();
49
+ this.#schemaReady = this.#refreshSchema();
50
+ const onTree = (event) => {
51
+ const paths = new Set([...event.changedPaths, ...event.deletedPaths]);
52
+ if (event.reset || paths.has('/space/.meta.json'))
53
+ void this.#refreshMeta();
54
+ if (event.reset || [...paths].some((p) => p.endsWith('/.schema.json')))
55
+ void this.#refreshSchema();
56
+ };
57
+ this.#unsubscribers.push(this.#fileTree.subscribe(onTree));
58
+ }
59
+ async #refreshMeta() {
60
+ if (this.#closed)
61
+ return;
62
+ this.meta = await this.#space.readMeta();
63
+ }
64
+ async #refreshSchema() {
65
+ if (this.#closed)
66
+ return;
67
+ this.schema = await this.#space.readSchema();
68
+ }
69
+ /** Resolve when the initial meta/schema fetch has settled. */
70
+ async ready() {
71
+ await Promise.all([this.#metaReady, this.#schemaReady]);
72
+ }
73
+ /**
74
+ * Set one metadata key, merging into the reactive `meta` and writing the full
75
+ * blob to `/space/.meta.json`. A `null`/`undefined` value deletes the key.
76
+ * The file tree reconciles `meta` after the write lands.
77
+ */
78
+ async setMeta(key, value) {
79
+ const next = { ...this.meta };
80
+ if (value === null || value === undefined)
81
+ delete next[key];
82
+ else
83
+ next[key] = value;
84
+ this.meta = next;
85
+ await this.#space.writeMeta(next);
31
86
  }
32
87
  get isClosed() { return this.#closed; }
33
88
  /** Get a reactive handle for a conversation in this space. */
@@ -59,9 +114,15 @@ class ReactiveSpaceImpl {
59
114
  // Space-level methods
60
115
  getObject(...args) { return this.#space.getObject(...args); }
61
116
  getObjects(...args) { return this.#space.getObjects(...args); }
117
+ putObject(...args) { return this.#space.putObject(...args); }
118
+ patchObject(...args) { return this.#space.patchObject(...args); }
119
+ moveObject(...args) { return this.#space.moveObject(...args); }
120
+ deleteObjects(...args) { return this.#space.deleteObjects(...args); }
121
+ createCollection(...args) { return this.#space.createCollection(...args); }
122
+ alterCollection(...args) { return this.#space.alterCollection(...args); }
123
+ dropCollection(...args) { return this.#space.dropCollection(...args); }
62
124
  object(path) { return new ReactiveObjectImpl(this.#space, this.#fileTree, path); }
63
125
  watch(options) { return new ReactiveWatchImpl(this.#space, this.#fileTree, options); }
64
- stat(...args) { return this.#space.stat(...args); }
65
126
  stopInteraction(...args) { return this.#space.stopInteraction(...args); }
66
127
  checkpoint(...args) { return this.#space.checkpoint(...args); }
67
128
  canUndo(...args) { return this.#space.canUndo(...args); }
@@ -69,11 +130,12 @@ class ReactiveSpaceImpl {
69
130
  undo(...args) { return this.#space.undo(...args); }
70
131
  redo(...args) { return this.#space.redo(...args); }
71
132
  clearHistory(...args) { return this.#space.clearHistory(...args); }
72
- getMetadata(...args) { return this.#space.getMetadata(...args); }
73
- getAllMetadata(...args) { return this.#space.getAllMetadata(...args); }
74
133
  getConversations(...args) { return this.#space.getConversations(...args); }
75
134
  deleteConversation(...args) { return this.#space.deleteConversation(...args); }
76
- getSchema(...args) { return this.#space.getSchema(...args); }
135
+ /** Rename a conversation without acquiring a reactive handle (avoids an unnecessary content fetch). */
136
+ renameConversation(conversationId, name) {
137
+ return this.#space.conversation(conversationId).rename(name);
138
+ }
77
139
  fetch(...args) { return this.#space.fetch(...args); }
78
140
  // Proxy resource methods
79
141
  getStorageUsage(...args) { return this.#space.getStorageUsage(...args); }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rool-dev/svelte",
3
- "version": "0.11.8",
3
+ "version": "0.11.9-dev.38b242c",
4
4
  "description": "Svelte 5 runes for Rool Spaces",
5
5
  "type": "module",
6
6
  "svelte": "./dist/index.js",
@@ -41,7 +41,7 @@
41
41
  },
42
42
  "license": "MIT",
43
43
  "dependencies": {
44
- "@rool-dev/sdk": "0.11.8"
44
+ "@rool-dev/sdk": "0.11.9-dev.38b242c"
45
45
  },
46
46
  "peerDependencies": {
47
47
  "svelte": "^5.0.0"