@rool-dev/svelte 0.11.9 → 0.11.10-dev.8995f1c
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/dist/rool.svelte.d.ts.map +1 -1
- package/dist/rool.svelte.js +4 -0
- package/dist/space-session.svelte.d.ts +1 -19
- package/dist/space-session.svelte.d.ts.map +1 -1
- package/dist/space-session.svelte.js +24 -19
- package/dist/space.svelte.d.ts +40 -9
- package/dist/space.svelte.d.ts.map +1 -1
- package/dist/space.svelte.js +68 -6
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rool.svelte.d.ts","sourceRoot":"","sources":["../src/rool.svelte.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,aAAa,EAAE,KAAK,eAAe,EAAE,KAAK,gBAAgB,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAC/I,OAAO,EAAa,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElE;;;;;;;;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;IAC/C,UAAU,oBAAmC;IAC7C,WAAW,UAAiB;gBAEhB,MAAM,CAAC,EAAE,gBAAgB;IAKrC;;;OAGG;IACH,IAAI,MAAM,IAAI,UAAU,CAEvB;IA2ED;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;IAiB9B;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAI7D;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAI9D;;;;OAIG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAM7C;;OAEG;IACH,MAAM,IAAI,IAAI;IAQd;;;OAGG;IACG,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"rool.svelte.d.ts","sourceRoot":"","sources":["../src/rool.svelte.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,aAAa,EAAE,KAAK,eAAe,EAAE,KAAK,gBAAgB,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAC/I,OAAO,EAAa,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElE;;;;;;;;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;IAC/C,UAAU,oBAAmC;IAC7C,WAAW,UAAiB;gBAEhB,MAAM,CAAC,EAAE,gBAAgB;IAKrC;;;OAGG;IACH,IAAI,MAAM,IAAI,UAAU,CAEvB;IA2ED;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;IAiB9B;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAI7D;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAI9D;;;;OAIG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAM7C;;OAEG;IACH,MAAM,IAAI,IAAI;IAQd;;;OAGG;IACG,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAQxD;;OAEG;IACG,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAQvD;;OAEG;IACG,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAQjF;;OAEG;IACH,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3C;;OAEG;IACH,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIlC;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5C;;OAEG;IACH,cAAc,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAIvD;;OAEG;IACH,iBAAiB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAI5C;;;OAGG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAKjD;;;OAGG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IAI9C;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM;IAI3B;;;;OAIG;IACG,YAAY,CAAC,KAAK,EAAE,MAAM;IAMhC;;OAEG;IACG,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC;IAQxE;;OAEG;IACH,IAAI,QAAQ,qCAEX;IAED;;OAEG;IACG,cAAc;IAMpB;;OAEG;IACG,iBAAiB,CAAC,KAAK,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAA;KAAE;IAQzF;;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"}
|
package/dist/rool.svelte.js
CHANGED
|
@@ -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;
|
|
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
|
-
|
|
147
|
-
|
|
148
|
-
|
|
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
|
-
|
|
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) {
|
|
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();
|
package/dist/space.svelte.d.ts
CHANGED
|
@@ -1,16 +1,33 @@
|
|
|
1
|
-
import type { RoolSpace,
|
|
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
|
|
6
|
-
* `connectionState`, plus space-level
|
|
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():
|
|
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
|
-
|
|
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
|
-
|
|
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":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,eAAe,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"space.svelte.d.ts","sourceRoot":"","sources":["../src/space.svelte.ts"],"names":[],"mappings":"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"}
|
package/dist/space.svelte.js
CHANGED
|
@@ -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
|
|
5
|
-
* `connectionState`, plus space-level
|
|
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
|
-
|
|
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.
|
|
3
|
+
"version": "0.11.10-dev.8995f1c",
|
|
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.
|
|
44
|
+
"@rool-dev/sdk": "0.11.10-dev.8995f1c"
|
|
45
45
|
},
|
|
46
46
|
"peerDependencies": {
|
|
47
47
|
"svelte": "^5.0.0"
|