@rool-dev/sdk 0.10.2-dev.47747e3 → 0.10.2-dev.57158ea
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 +35 -160
- package/dist/channel.d.ts +23 -79
- package/dist/channel.d.ts.map +1 -1
- package/dist/channel.js +175 -309
- package/dist/channel.js.map +1 -1
- package/dist/client.d.ts +3 -49
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +7 -85
- package/dist/client.js.map +1 -1
- package/dist/graphql.d.ts +3 -44
- package/dist/graphql.d.ts.map +1 -1
- package/dist/graphql.js +7 -208
- package/dist/graphql.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/locations.d.ts +0 -5
- package/dist/locations.d.ts.map +1 -1
- package/dist/locations.js +1 -13
- package/dist/locations.js.map +1 -1
- package/dist/rest.d.ts +9 -0
- package/dist/rest.d.ts.map +1 -1
- package/dist/rest.js +44 -1
- package/dist/rest.js.map +1 -1
- package/dist/space.d.ts +2 -5
- package/dist/space.d.ts.map +1 -1
- package/dist/space.js +25 -29
- package/dist/space.js.map +1 -1
- package/dist/subscription.d.ts.map +1 -1
- package/dist/subscription.js +19 -25
- package/dist/subscription.js.map +1 -1
- package/dist/types.d.ts +29 -178
- package/dist/types.d.ts.map +1 -1
- package/dist/webdav.d.ts +14 -4
- package/dist/webdav.d.ts.map +1 -1
- package/dist/webdav.js +92 -27
- package/dist/webdav.js.map +1 -1
- package/package.json +2 -1
- package/dist/apps.d.ts +0 -30
- package/dist/apps.d.ts.map +0 -1
- package/dist/apps.js +0 -81
- package/dist/apps.js.map +0 -1
package/README.md
CHANGED
|
@@ -2,8 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
The TypeScript SDK for Rool, a persistent and collaborative environment for organizing objects.
|
|
4
4
|
|
|
5
|
-
> **Building a new Rool extension?** Start with [`@rool-dev/extension`](/extension/) — it handles hosting, dev server, and gives you a reactive Svelte channel out of the box. This SDK is for advanced use cases: integrating Rool into an existing application, building Node.js scripts, or working outside the extension sandbox.
|
|
6
|
-
|
|
7
5
|
The SDK manages authentication, real-time synchronization, and per-space file storage. Core primitives:
|
|
8
6
|
|
|
9
7
|
- **Spaces** — Containers for objects, schema, metadata, channels, and files
|
|
@@ -65,10 +63,9 @@ const { message, objects } = await channel.prompt(
|
|
|
65
63
|
console.log(message); // AI explains what it did
|
|
66
64
|
console.log(`Modified ${objects.length} objects`);
|
|
67
65
|
|
|
68
|
-
//
|
|
69
|
-
const
|
|
70
|
-
|
|
71
|
-
});
|
|
66
|
+
// Read an object by location
|
|
67
|
+
const loadedEarth = await channel.getObject(earth.location);
|
|
68
|
+
console.log(loadedEarth?.body.name);
|
|
72
69
|
|
|
73
70
|
// Clean up
|
|
74
71
|
channel.close();
|
|
@@ -229,7 +226,7 @@ References are just data — no special API is needed to create or remove them.
|
|
|
229
226
|
#### Location helpers
|
|
230
227
|
|
|
231
228
|
```typescript
|
|
232
|
-
import { loc, parseLocation, normalizeLocation
|
|
229
|
+
import { loc, parseLocation, normalizeLocation } from '@rool-dev/sdk';
|
|
233
230
|
|
|
234
231
|
loc('article', 'welcome'); // '/space/article/welcome.json'
|
|
235
232
|
parseLocation('/space/article/welcome.json'); // { collection: 'article', basename: 'welcome' }
|
|
@@ -237,9 +234,6 @@ parseLocation('/space/article/welcome.json'); // { collection: 'article', basena
|
|
|
237
234
|
// normalizeLocation accepts canonical or short form and returns canonical
|
|
238
235
|
normalizeLocation('article/welcome'); // '/space/article/welcome.json'
|
|
239
236
|
normalizeLocation('/space/article/welcome.json'); // unchanged
|
|
240
|
-
|
|
241
|
-
// 6-char random basename — same generator the SDK uses by default
|
|
242
|
-
generateBasename(); // e.g., 'X7kQ9p'
|
|
243
237
|
```
|
|
244
238
|
|
|
245
239
|
SDK methods that accept a location (`getObject`, `updateObject`, `deleteObjects`, `moveObject`, etc.) accept either form and normalize internally. SDK return values always use the canonical full form.
|
|
@@ -320,24 +314,24 @@ await channel.createObject('article', {
|
|
|
320
314
|
|
|
321
315
|
### Real-time Sync
|
|
322
316
|
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
- `local_user` — This client made the change
|
|
326
|
-
- `remote_user` — Another user/client made the change
|
|
327
|
-
- `remote_agent` — AI agent made the change
|
|
328
|
-
- `system` — Resync after error
|
|
317
|
+
Object and file reactivity is WebDAV-based. Listen for space-level file change notifications, then reconcile with `webdav.syncCollection()` using your sync token. This covers both object files under `/space` and user files under `/rool-drive`.
|
|
329
318
|
|
|
330
319
|
```typescript
|
|
331
|
-
|
|
332
|
-
channel.on('objectUpdated', ({ location, object, source }) => {
|
|
333
|
-
renderObject(location, object);
|
|
334
|
-
if (source === 'remote_agent') {
|
|
335
|
-
doLayout(); // AI might have added content
|
|
336
|
-
}
|
|
337
|
-
});
|
|
320
|
+
let token: string | null = null;
|
|
338
321
|
|
|
339
|
-
|
|
340
|
-
|
|
322
|
+
async function syncFiles() {
|
|
323
|
+
const result = await space.webdav.syncCollection('/', {
|
|
324
|
+
token,
|
|
325
|
+
level: 'infinite',
|
|
326
|
+
props: ['displayname', 'getetag', 'getlastmodified', 'resourcetype'],
|
|
327
|
+
});
|
|
328
|
+
token = result.token;
|
|
329
|
+
updateFileTree(result.responses);
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
space.on('filesChanged', syncFiles);
|
|
333
|
+
space.on('filesReset', () => { token = null; syncFiles(); });
|
|
334
|
+
await syncFiles();
|
|
341
335
|
```
|
|
342
336
|
|
|
343
337
|
### Locations & Basenames
|
|
@@ -358,7 +352,7 @@ await channel.createObject('article',
|
|
|
358
352
|
|
|
359
353
|
```typescript
|
|
360
354
|
// Fire-and-forget: create and reference without waiting
|
|
361
|
-
const basename =
|
|
355
|
+
const basename = 'idea-seed';
|
|
362
356
|
const location = loc('note', basename);
|
|
363
357
|
|
|
364
358
|
channel.createObject('note', { text: '{{expand this idea}}' }, { basename });
|
|
@@ -574,7 +568,7 @@ await space.addUser(user.id, 'editor');
|
|
|
574
568
|
| `owner` | Full control, can delete space and manage all users |
|
|
575
569
|
| `admin` | All editor capabilities, plus can manage users (except other admins/owners) |
|
|
576
570
|
| `editor` | Can create, modify, move, and delete objects |
|
|
577
|
-
| `viewer` | Read-only access (can query with `prompt` and
|
|
571
|
+
| `viewer` | Read-only access (can query with `prompt` and read objects/files) |
|
|
578
572
|
|
|
579
573
|
### Space Collaboration Methods
|
|
580
574
|
|
|
@@ -621,18 +615,9 @@ When a user accesses a space via URL, they're granted the corresponding role (`v
|
|
|
621
615
|
|
|
622
616
|
### Real-time Collaboration
|
|
623
617
|
|
|
624
|
-
When multiple users have a space open, changes
|
|
625
|
-
|
|
626
|
-
```typescript
|
|
627
|
-
channel.on('objectUpdated', ({ location, object, source }) => {
|
|
628
|
-
if (source === 'remote_user') {
|
|
629
|
-
// Another user made this change
|
|
630
|
-
showCollaboratorActivity(object);
|
|
631
|
-
}
|
|
632
|
-
});
|
|
633
|
-
```
|
|
618
|
+
When multiple users have a space open, object and file changes are announced by `space.on('filesChanged')` and reconciled through WebDAV `syncCollection()`. Channel/conversation state still emits channel events; filesystem state does not use channel object events.
|
|
634
619
|
|
|
635
|
-
See [Real-time Sync](#real-time-sync) for
|
|
620
|
+
See [Real-time Sync](#real-time-sync) for a WebDAV sync-token example.
|
|
636
621
|
|
|
637
622
|
## RoolClient API
|
|
638
623
|
|
|
@@ -663,8 +648,6 @@ const client = new RoolClient({
|
|
|
663
648
|
| `duplicateSpace(sourceSpaceId, name): Promise<RoolSpace>` | Duplicate an existing space. Returns a handle to the new space. |
|
|
664
649
|
| `deleteSpace(id): Promise<void>` | Permanently delete a space (cannot be undone) |
|
|
665
650
|
| `importArchive(name, archive): Promise<RoolSpace>` | Import from a zip archive, creating a new space |
|
|
666
|
-
| `webdav(spaceId): RoolWebDAV` | Open a WebDAV client for a space's file storage |
|
|
667
|
-
| `getSpaceStorageUsage(spaceId): Promise<SpaceFileStorageUsage>` | Get WebDAV quota usage for a space |
|
|
668
651
|
|
|
669
652
|
### Channel Management
|
|
670
653
|
|
|
@@ -717,39 +700,11 @@ client.on('userStorageChanged', ({ key, value, source }) => {
|
|
|
717
700
|
});
|
|
718
701
|
```
|
|
719
702
|
|
|
720
|
-
### Extensions
|
|
721
|
-
|
|
722
|
-
Manage and publish extensions. See [`@rool-dev/extension`](/extension/) for building extensions.
|
|
723
|
-
|
|
724
|
-
There are two distinct domains: your **personal library** (extensions you've created or installed) and the **published extensions** (extensions discoverable by all users). Each has its own return type.
|
|
725
|
-
|
|
726
|
-
#### Your Library (`ExtensionInfo`)
|
|
727
|
-
|
|
728
|
-
Manage extensions you own. Each `ExtensionInfo` includes `published` (whether it's listed in the marketplace) and `marketplaceExtensionId` (non-null if you installed it from someone else's listing, null if you authored it).
|
|
729
|
-
|
|
730
|
-
| Method | Description |
|
|
731
|
-
|--------|-------------|
|
|
732
|
-
| `uploadExtension(extensionId, options): Promise<ExtensionInfo>` | Upload or update an extension (`options.bundle`: zip with `index.html` and `manifest.json`) |
|
|
733
|
-
| `listExtensions(): Promise<ExtensionInfo[]>` | List your extensions |
|
|
734
|
-
| `getExtensionInfo(extensionId): Promise<ExtensionInfo \| null>` | Get info for a specific extension |
|
|
735
|
-
| `deleteExtension(extensionId): Promise<void>` | Delete an extension permanently (removes files and DB row) |
|
|
736
|
-
|
|
737
|
-
#### Marketplace (`PublishedExtensionInfo`)
|
|
738
|
-
|
|
739
|
-
Discover and install extensions published by other users.
|
|
740
|
-
|
|
741
|
-
| Method | Description |
|
|
742
|
-
|--------|-------------|
|
|
743
|
-
| `findExtensions(options?): Promise<PublishedExtensionInfo[]>` | Search the marketplace. Options: `query` (semantic search string), `limit` (default 20, max 100). Omit `query` to browse all. |
|
|
744
|
-
| `publishToPublic(extensionId): Promise<void>` | Publish one of your extensions to the marketplace |
|
|
745
|
-
| `unpublishFromPublic(extensionId): Promise<void>` | Remove from the marketplace (keeps the extension in your library) |
|
|
746
|
-
|
|
747
703
|
### Utilities
|
|
748
704
|
|
|
749
705
|
| Method | Description |
|
|
750
706
|
|--------|-------------|
|
|
751
|
-
| `RoolClient.
|
|
752
|
-
| `RoolClient.generateId(): string` | Same as `generateBasename()`; retained for callers minting non-object IDs (interactions, conversations, channels). |
|
|
707
|
+
| `RoolClient.generateId(): string` | Generate a unique 6-character alphanumeric ID. |
|
|
753
708
|
| `destroy(): void` | Clean up resources |
|
|
754
709
|
|
|
755
710
|
### Client Events
|
|
@@ -814,7 +769,6 @@ A space handle with a live SSE subscription. Extends `EventEmitter`. Manages use
|
|
|
814
769
|
| `getChannels(): ChannelInfo[]` | List channels (deprecated — use `channels` property instead) |
|
|
815
770
|
| `renameChannel(channelId, name): Promise<void>` | Rename a channel |
|
|
816
771
|
| `deleteChannel(channelId): Promise<void>` | Delete a channel |
|
|
817
|
-
| `installExtension(extensionId, channelId): Promise<string>` | Install an extension into a channel of this space. If you own it, wires it directly. If it's a marketplace extension, copies and builds a new extension in your library. Returns the channel ID. |
|
|
818
772
|
| `exportArchive(): Promise<Blob>` | Export space as zip archive |
|
|
819
773
|
| `getStorageUsage(): Promise<SpaceFileStorageUsage>` | Get WebDAV quota usage for this space |
|
|
820
774
|
| `fetchMachineResource(resource): Promise<Response>` | Fetch a resolved file `MachineResource` through this space |
|
|
@@ -824,7 +778,7 @@ A space handle with a live SSE subscription. Extends `EventEmitter`. Manages use
|
|
|
824
778
|
|
|
825
779
|
```typescript
|
|
826
780
|
space.on('channelCreated', (channel: ChannelInfo) => void) // New channel added
|
|
827
|
-
space.on('channelUpdated', (channel: ChannelInfo) => void) // Channel metadata changed
|
|
781
|
+
space.on('channelUpdated', (channel: ChannelInfo) => void) // Channel metadata changed
|
|
828
782
|
space.on('channelDeleted', (channelId: string) => void) // Channel removed
|
|
829
783
|
space.on('filesChanged', ({ source, timestamp }) => void) // WebDAV file storage changed; call webdav.syncCollection()
|
|
830
784
|
space.on('connectionStateChanged', (state: 'connected' | 'disconnected' | 'reconnecting') => void)
|
|
@@ -845,9 +799,6 @@ A channel is a named context within a space. All object operations, AI prompts,
|
|
|
845
799
|
| `userId: string` | Current user's ID |
|
|
846
800
|
| `channelId: string` | Channel ID (read-only, fixed at open time) |
|
|
847
801
|
| `isReadOnly: boolean` | True if viewer role |
|
|
848
|
-
| `extensionUrl: string \| null` | URL of the installed extension, or null if this is a plain channel |
|
|
849
|
-
| `extensionId: string \| null` | ID of the installed extension, or null if this is a plain channel |
|
|
850
|
-
| `manifest: ExtensionManifest \| null` | Extension manifest snapshot (name, icon, collections, etc.), or null |
|
|
851
802
|
|
|
852
803
|
### Lifecycle
|
|
853
804
|
|
|
@@ -867,8 +818,6 @@ All methods that accept a location accept either the canonical form or the short
|
|
|
867
818
|
|--------|-------------|
|
|
868
819
|
| `getObject(location): Promise<RoolObject \| undefined>` | Get an object, or undefined if not found. |
|
|
869
820
|
| `stat(location): RoolObjectStat \| undefined` | Get audit info for an object: when it was last modified, by whom, and where (channel/conversation/interaction). Sync read from local cache. |
|
|
870
|
-
| `findObjects(options): Promise<{ objects, message }>` | Find objects using structured filters and/or natural language. Results sorted by modifiedAt (desc by default). |
|
|
871
|
-
| `getObjectLocations(options?): string[]` | Get all object locations. Sorted by modifiedAt (desc by default). Options: `{ limit?, order? }`. |
|
|
872
821
|
| `createObject(collection, body, options?): Promise<{ object, message }>` | Create a new object in `collection`. The SDK mints a random basename unless you pass `options.basename`. |
|
|
873
822
|
| `updateObject(location, options): Promise<{ object, message }>` | Update an existing object's body. |
|
|
874
823
|
| `moveObject(from, to, options?): Promise<{ object, message }>` | Rename or relocate an object. See [Moving and Renaming](#moving-and-renaming). |
|
|
@@ -961,59 +910,6 @@ await channel.moveObject(from, to, {
|
|
|
961
910
|
| `ephemeral` | If true, the operation won't be recorded in interaction history. |
|
|
962
911
|
| `parentInteractionId` | Conversation tree parent. Omit to auto-continue; pass `null` for a new root. |
|
|
963
912
|
|
|
964
|
-
#### findObjects
|
|
965
|
-
|
|
966
|
-
Find objects using structured filters and/or natural language.
|
|
967
|
-
|
|
968
|
-
- **`where` only** — exact-match filtering, no AI, no credits.
|
|
969
|
-
- **`collection` only** — filter by collection name, no AI, no credits.
|
|
970
|
-
- **`prompt` only** — AI-powered semantic query over all objects.
|
|
971
|
-
- **`where` + `prompt`** — `where` (and `locations`) narrow the data set first, then the AI queries within the constrained set.
|
|
972
|
-
|
|
973
|
-
| Option | Description |
|
|
974
|
-
|--------|-------------|
|
|
975
|
-
| `where` | Exact-match body-field filter (e.g. `{ status: 'published' }`). Values must match literally — no operators or `{{placeholders}}`. When combined with `prompt`, constrains which objects the AI can see. |
|
|
976
|
-
| `collection` | Filter by collection name. |
|
|
977
|
-
| `prompt` | Natural language query. Triggers AI evaluation (uses credits). |
|
|
978
|
-
| `limit` | Maximum number of results. |
|
|
979
|
-
| `locations` | Scope to specific object locations. Constrains the candidate set in both structured and AI queries. |
|
|
980
|
-
| `order` | Sort order by modifiedAt: `'asc'` or `'desc'` (default: `'desc'`). |
|
|
981
|
-
| `ephemeral` | If true, the query won't be recorded in interaction history. Useful for responsive search. |
|
|
982
|
-
|
|
983
|
-
**Examples:**
|
|
984
|
-
|
|
985
|
-
```typescript
|
|
986
|
-
// Filter by collection (no AI, no credits)
|
|
987
|
-
const { objects } = await channel.findObjects({
|
|
988
|
-
collection: 'article'
|
|
989
|
-
});
|
|
990
|
-
|
|
991
|
-
// Exact field matching (no AI, no credits)
|
|
992
|
-
const { objects } = await channel.findObjects({
|
|
993
|
-
where: { status: 'published' }
|
|
994
|
-
});
|
|
995
|
-
|
|
996
|
-
// Combine collection and field filters
|
|
997
|
-
const { objects } = await channel.findObjects({
|
|
998
|
-
collection: 'article',
|
|
999
|
-
where: { status: 'published' }
|
|
1000
|
-
});
|
|
1001
|
-
|
|
1002
|
-
// Pure natural language query (AI interprets)
|
|
1003
|
-
const { objects, message } = await channel.findObjects({
|
|
1004
|
-
prompt: 'articles about space exploration published this year'
|
|
1005
|
-
});
|
|
1006
|
-
|
|
1007
|
-
// Combined: collection + where narrow the data, prompt queries within it
|
|
1008
|
-
const { objects } = await channel.findObjects({
|
|
1009
|
-
collection: 'article',
|
|
1010
|
-
prompt: 'that discuss climate solutions positively',
|
|
1011
|
-
limit: 10
|
|
1012
|
-
});
|
|
1013
|
-
```
|
|
1014
|
-
|
|
1015
|
-
When `where` or `locations` are provided with a `prompt`, the AI only sees the filtered subset — not the full space. The returned `message` explains the query result.
|
|
1016
|
-
|
|
1017
913
|
### Undo/Redo
|
|
1018
914
|
|
|
1019
915
|
| Method | Description |
|
|
@@ -1041,12 +937,13 @@ Store arbitrary data alongside the space without it being part of an object's bo
|
|
|
1041
937
|
|
|
1042
938
|
Every space has authenticated file storage. WebDAV is the SDK surface for that storage: paths are relative to the space root and collection operations use WebDAV collection semantics. Human/AI file links use `rool-machine:/rool-drive/...`; resolve those links with `resolveMachineResource()` and fetch file resources with `space.fetchMachineResource(resource)`.
|
|
1043
939
|
|
|
1044
|
-
|
|
940
|
+
Open a space, then use `space.webdav`.
|
|
1045
941
|
|
|
1046
942
|
```typescript
|
|
1047
943
|
import { resolveMachineResource } from '@rool-dev/sdk';
|
|
1048
944
|
|
|
1049
|
-
const
|
|
945
|
+
const space = await client.openSpace('space-id');
|
|
946
|
+
const webdav = space.webdav;
|
|
1050
947
|
|
|
1051
948
|
await webdav.mkcol('docs');
|
|
1052
949
|
await webdav.put('docs/readme.md', '# Hello', {
|
|
@@ -1091,8 +988,6 @@ Paths are space-relative (`docs/readme.md`, not `/docs/readme.md`). WebDAV metho
|
|
|
1091
988
|
|
|
1092
989
|
| Method | Description |
|
|
1093
990
|
|--------|-------------|
|
|
1094
|
-
| `client.webdav(spaceId)` | Create a WebDAV client for a space |
|
|
1095
|
-
| `client.getSpaceStorageUsage(spaceId)` | Get WebDAV quota usage for a space |
|
|
1096
991
|
| `space.webdav` | WebDAV client for an open space |
|
|
1097
992
|
| `space.getStorageUsage()` | Get WebDAV quota usage for an open space |
|
|
1098
993
|
| `webdav.getStorageUsage()` | Get WebDAV quota usage through the WebDAV client |
|
|
@@ -1225,37 +1120,23 @@ The archive bundles `data.json` (objects, metadata, and channels) together with
|
|
|
1225
1120
|
|
|
1226
1121
|
### Channel Events
|
|
1227
1122
|
|
|
1228
|
-
|
|
1123
|
+
Channel events are for channel/conversation state. Object and file reactivity goes through `space.on('filesChanged' | 'filesReset')` plus WebDAV `syncCollection()`.
|
|
1229
1124
|
|
|
1230
1125
|
```typescript
|
|
1231
|
-
//
|
|
1232
|
-
// - 'local_user': This client made the change
|
|
1233
|
-
// - 'remote_user': Another user/client made the change
|
|
1234
|
-
// - 'remote_agent': AI agent made the change
|
|
1235
|
-
// - 'system': Resync after error
|
|
1236
|
-
|
|
1237
|
-
// Object events — payload includes the full RoolObject
|
|
1238
|
-
channel.on('objectCreated', ({ location, object, source }) => void)
|
|
1239
|
-
channel.on('objectUpdated', ({ location, object, source }) => void)
|
|
1240
|
-
channel.on('objectDeleted', ({ location, source }) => void)
|
|
1241
|
-
channel.on('objectMoved', ({ from, to, object, source }) => void)
|
|
1242
|
-
|
|
1243
|
-
// Space metadata
|
|
1244
|
-
channel.on('metadataUpdated', ({ metadata, source }) => void)
|
|
1245
|
-
|
|
1246
|
-
// Collection schema changed
|
|
1247
|
-
channel.on('schemaUpdated', ({ schema, source }) => void)
|
|
1248
|
-
|
|
1249
|
-
// Channel metadata updated (name, extensionUrl)
|
|
1126
|
+
// Channel metadata updated
|
|
1250
1127
|
channel.on('channelUpdated', ({ channelId, source }) => void)
|
|
1251
1128
|
|
|
1252
1129
|
// Conversation interaction history updated
|
|
1253
1130
|
channel.on('conversationUpdated', ({ conversationId, channelId, source }) => void)
|
|
1254
1131
|
|
|
1132
|
+
// Space metadata / schema compatibility events
|
|
1133
|
+
channel.on('metadataUpdated', ({ metadata, source }) => void)
|
|
1134
|
+
channel.on('schemaUpdated', ({ schema, source }) => void)
|
|
1135
|
+
|
|
1255
1136
|
// Full state replacement (undo/redo, resync after error)
|
|
1256
1137
|
channel.on('reset', ({ source }) => void)
|
|
1257
1138
|
|
|
1258
|
-
// Sync error occurred
|
|
1139
|
+
// Sync error occurred
|
|
1259
1140
|
channel.on('syncError', (error: Error) => void)
|
|
1260
1141
|
```
|
|
1261
1142
|
|
|
@@ -1386,9 +1267,6 @@ interface Channel {
|
|
|
1386
1267
|
createdAt: number; // Timestamp when channel was created
|
|
1387
1268
|
createdBy: string; // User ID who created the channel
|
|
1388
1269
|
createdByName?: string; // Display name at time of creation
|
|
1389
|
-
extensionUrl?: string; // URL of installed extension (set by installExtension)
|
|
1390
|
-
extensionId?: string; // ID of installed extension (user_extensions.extension_id)
|
|
1391
|
-
manifest?: ExtensionManifest; // Extension manifest snapshot (set when extension is wired)
|
|
1392
1270
|
conversations: Record<string, Conversation>; // Keyed by conversation ID
|
|
1393
1271
|
}
|
|
1394
1272
|
|
|
@@ -1400,9 +1278,6 @@ interface ChannelInfo {
|
|
|
1400
1278
|
createdBy: string;
|
|
1401
1279
|
createdByName: string | null;
|
|
1402
1280
|
interactionCount: number;
|
|
1403
|
-
extensionUrl: string | null; // URL of installed extension, or null
|
|
1404
|
-
extensionId: string | null; // ID of installed extension, or null
|
|
1405
|
-
manifest: ExtensionManifest | null; // Extension manifest snapshot, or null
|
|
1406
1281
|
}
|
|
1407
1282
|
```
|
|
1408
1283
|
|
package/dist/channel.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { EventEmitter } from './event-emitter.js';
|
|
2
2
|
import type { GraphQLClient } from './graphql.js';
|
|
3
3
|
import type { RestClient } from './rest.js';
|
|
4
|
-
import type
|
|
4
|
+
import { type RoolWebDAV } from './webdav.js';
|
|
5
5
|
import type { Logger } from './logger.js';
|
|
6
|
-
import type { RoolObject, RoolObjectStat, ChannelEvents, RoolUserRole, PromptOptions,
|
|
6
|
+
import type { RoolObject, GetObjectsResult, RoolObjectStat, ChannelEvents, RoolUserRole, PromptOptions, CreateObjectOptions, UpdateObjectOptions, MoveObjectOptions, ChannelEvent, Interaction, Channel, ConversationInfo, LinkAccess, SpaceSchema, CollectionDef, FieldDef, CollectionOptions } from './types.js';
|
|
7
7
|
export declare function generateEntityId(): string;
|
|
8
8
|
export interface ChannelConfig {
|
|
9
9
|
id: string;
|
|
@@ -12,8 +12,6 @@ export interface ChannelConfig {
|
|
|
12
12
|
linkAccess: LinkAccess;
|
|
13
13
|
/** Current user's ID (for identifying own interactions) */
|
|
14
14
|
userId: string;
|
|
15
|
-
/** Object locations in the space (sorted by modifiedAt desc) */
|
|
16
|
-
objectLocations: string[];
|
|
17
15
|
/** Object stats keyed by location */
|
|
18
16
|
objectStats: Record<string, RoolObjectStat>;
|
|
19
17
|
/** Collection schema */
|
|
@@ -38,9 +36,9 @@ export interface ChannelConfig {
|
|
|
38
36
|
* open a second one.
|
|
39
37
|
*
|
|
40
38
|
* Objects are addressed by location (`/space/<collection>/<basename>.json`).
|
|
41
|
-
* Only schema, metadata,
|
|
42
|
-
*
|
|
43
|
-
*
|
|
39
|
+
* Only schema, metadata, object stats, and the channel's own history are cached
|
|
40
|
+
* locally. Object bodies are fetched on demand. Object/file reactivity is
|
|
41
|
+
* exposed at the space level via WebDAV sync notifications.
|
|
44
42
|
*/
|
|
45
43
|
export declare class RoolChannel extends EventEmitter<ChannelEvents> {
|
|
46
44
|
private _id;
|
|
@@ -59,12 +57,8 @@ export declare class RoolChannel extends EventEmitter<ChannelEvents> {
|
|
|
59
57
|
private _meta;
|
|
60
58
|
private _schema;
|
|
61
59
|
private _channel;
|
|
62
|
-
private _objectLocations;
|
|
63
60
|
private _objectStats;
|
|
64
61
|
private _activeLeaves;
|
|
65
|
-
private _pendingMutations;
|
|
66
|
-
private _objectResolvers;
|
|
67
|
-
private _objectBuffer;
|
|
68
62
|
constructor(config: ChannelConfig);
|
|
69
63
|
/**
|
|
70
64
|
* Handle an event from the shared space subscription.
|
|
@@ -80,7 +74,6 @@ export declare class RoolChannel extends EventEmitter<ChannelEvents> {
|
|
|
80
74
|
_applyResyncData(data: {
|
|
81
75
|
meta: Record<string, unknown>;
|
|
82
76
|
schema: SpaceSchema;
|
|
83
|
-
objectLocations: string[];
|
|
84
77
|
objectStats: Record<string, RoolObjectStat>;
|
|
85
78
|
channel: Channel | undefined;
|
|
86
79
|
}): void;
|
|
@@ -105,18 +98,6 @@ export declare class RoolChannel extends EventEmitter<ChannelEvents> {
|
|
|
105
98
|
*/
|
|
106
99
|
get conversationId(): string;
|
|
107
100
|
get isReadOnly(): boolean;
|
|
108
|
-
/**
|
|
109
|
-
* Get the extension URL if this channel was created via installExtension, or null.
|
|
110
|
-
*/
|
|
111
|
-
get extensionUrl(): string | null;
|
|
112
|
-
/**
|
|
113
|
-
* Get the extension ID if this channel has an installed extension, or null.
|
|
114
|
-
*/
|
|
115
|
-
get extensionId(): string | null;
|
|
116
|
-
/**
|
|
117
|
-
* Get the extension manifest if this channel has an installed extension, or null.
|
|
118
|
-
*/
|
|
119
|
-
get manifest(): ExtensionManifest | null;
|
|
120
101
|
/**
|
|
121
102
|
* Get the active branch of the current conversation as a flat array (root → leaf).
|
|
122
103
|
* Walks from the active leaf up through parentId pointers.
|
|
@@ -178,6 +159,8 @@ export declare class RoolChannel extends EventEmitter<ChannelEvents> {
|
|
|
178
159
|
redo(): Promise<boolean>;
|
|
179
160
|
/** Clear the space's checkpoint history. */
|
|
180
161
|
clearHistory(): Promise<void>;
|
|
162
|
+
private davHeaders;
|
|
163
|
+
private readObject;
|
|
181
164
|
/**
|
|
182
165
|
* Get an object by location. Fetches from the server on each call.
|
|
183
166
|
*
|
|
@@ -185,39 +168,25 @@ export declare class RoolChannel extends EventEmitter<ChannelEvents> {
|
|
|
185
168
|
* or the short form (`<collection>/<basename>`).
|
|
186
169
|
*/
|
|
187
170
|
getObject(location: string): Promise<RoolObject | undefined>;
|
|
171
|
+
/**
|
|
172
|
+
* Get objects by location in bulk.
|
|
173
|
+
*
|
|
174
|
+
* Accepts either canonical locations (`/space/<collection>/<basename>.json`)
|
|
175
|
+
* or short locations (`<collection>/<basename>`). Duplicate locations are
|
|
176
|
+
* fetched once, preserving their first requested order.
|
|
177
|
+
*/
|
|
178
|
+
getObjects(locations: string[]): Promise<GetObjectsResult>;
|
|
188
179
|
/**
|
|
189
180
|
* Get an object's stat (audit information).
|
|
190
181
|
* Returns the cached stat or undefined if not known.
|
|
191
182
|
*/
|
|
192
183
|
stat(location: string): RoolObjectStat | undefined;
|
|
193
|
-
/**
|
|
194
|
-
* Find objects using structured filters and/or natural language.
|
|
195
|
-
*/
|
|
196
|
-
findObjects(options: FindObjectsOptions): Promise<{
|
|
197
|
-
objects: RoolObject[];
|
|
198
|
-
message: string;
|
|
199
|
-
}>;
|
|
200
|
-
/** @internal */
|
|
201
|
-
_findObjectsImpl(options: FindObjectsOptions, conversationId: string): Promise<{
|
|
202
|
-
objects: RoolObject[];
|
|
203
|
-
message: string;
|
|
204
|
-
}>;
|
|
205
|
-
/**
|
|
206
|
-
* Get all object locations (sync, from local cache).
|
|
207
|
-
* The list is loaded on open and kept current via SSE events.
|
|
208
|
-
*/
|
|
209
|
-
getObjectLocations(options?: {
|
|
210
|
-
limit?: number;
|
|
211
|
-
order?: 'asc' | 'desc';
|
|
212
|
-
}): string[];
|
|
213
184
|
/**
|
|
214
185
|
* Create a new object in the given collection.
|
|
215
186
|
*
|
|
216
187
|
* @param collection - The collection (must exist in the schema)
|
|
217
|
-
* @param body - Object body fields.
|
|
218
|
-
* Fields prefixed with `_` are hidden from AI.
|
|
188
|
+
* @param body - Object body fields. Fields prefixed with `_` are hidden from AI.
|
|
219
189
|
* @param options.basename - Specific basename to use. If omitted, the SDK generates a random one.
|
|
220
|
-
* @param options.ephemeral - If true, the operation won't be recorded in interaction history.
|
|
221
190
|
* @returns The created object and a status message.
|
|
222
191
|
*/
|
|
223
192
|
createObject(collection: string, body: Record<string, unknown>, options?: CreateObjectOptions): Promise<{
|
|
@@ -233,9 +202,7 @@ export declare class RoolChannel extends EventEmitter<ChannelEvents> {
|
|
|
233
202
|
* Update an existing object.
|
|
234
203
|
*
|
|
235
204
|
* @param location - The object's location (canonical or short form)
|
|
236
|
-
* @param options.data - Fields to add or update. Pass `null` to delete a field.
|
|
237
|
-
* @param options.prompt - AI prompt to drive the update.
|
|
238
|
-
* @param options.ephemeral - If true, the operation won't be recorded in interaction history.
|
|
205
|
+
* @param options.data - Fields to add or update. Pass `null` to delete a field.
|
|
239
206
|
*/
|
|
240
207
|
updateObject(location: string, options: UpdateObjectOptions): Promise<{
|
|
241
208
|
object: RoolObject;
|
|
@@ -253,7 +220,6 @@ export declare class RoolChannel extends EventEmitter<ChannelEvents> {
|
|
|
253
220
|
* @param from - Current location
|
|
254
221
|
* @param to - New location
|
|
255
222
|
* @param options.body - Replace the body atomically as part of the move.
|
|
256
|
-
* @param options.ephemeral - If true, the operation won't be recorded in interaction history.
|
|
257
223
|
*/
|
|
258
224
|
moveObject(from: string, to: string, options?: MoveObjectOptions): Promise<{
|
|
259
225
|
object: RoolObject;
|
|
@@ -274,13 +240,13 @@ export declare class RoolChannel extends EventEmitter<ChannelEvents> {
|
|
|
274
240
|
/** Get the current schema for this space. */
|
|
275
241
|
getSchema(): SpaceSchema;
|
|
276
242
|
/** Create a new collection schema. */
|
|
277
|
-
createCollection(name: string, fields: FieldDef[]): Promise<CollectionDef>;
|
|
243
|
+
createCollection(name: string, fields: FieldDef[] | CollectionDef, options?: CollectionOptions): Promise<CollectionDef>;
|
|
278
244
|
/** @internal */
|
|
279
|
-
_createCollectionImpl(name: string, fields: FieldDef[], conversationId: string): Promise<CollectionDef>;
|
|
245
|
+
_createCollectionImpl(name: string, fields: FieldDef[] | CollectionDef, options: CollectionOptions | undefined, conversationId: string): Promise<CollectionDef>;
|
|
280
246
|
/** Alter an existing collection schema, replacing its field definitions. */
|
|
281
|
-
alterCollection(name: string, fields: FieldDef[]): Promise<CollectionDef>;
|
|
247
|
+
alterCollection(name: string, fields: FieldDef[] | CollectionDef, options?: CollectionOptions): Promise<CollectionDef>;
|
|
282
248
|
/** @internal */
|
|
283
|
-
_alterCollectionImpl(name: string, fields: FieldDef[], conversationId: string): Promise<CollectionDef>;
|
|
249
|
+
_alterCollectionImpl(name: string, fields: FieldDef[] | CollectionDef, options: CollectionOptions | undefined, conversationId: string): Promise<CollectionDef>;
|
|
284
250
|
/** Drop a collection schema. */
|
|
285
251
|
dropCollection(name: string): Promise<void>;
|
|
286
252
|
/** @internal */
|
|
@@ -334,28 +300,11 @@ export declare class RoolChannel extends EventEmitter<ChannelEvents> {
|
|
|
334
300
|
}): Promise<Response>;
|
|
335
301
|
private uploadAttachment;
|
|
336
302
|
private ensureCollection;
|
|
337
|
-
/**
|
|
338
|
-
* Register a collector that resolves when the object arrives via SSE.
|
|
339
|
-
* @internal
|
|
340
|
-
*/
|
|
341
|
-
private _collectObject;
|
|
342
|
-
/** @internal */
|
|
343
|
-
private _cancelCollector;
|
|
344
|
-
/** @internal */
|
|
345
|
-
private _deliverObject;
|
|
346
303
|
/**
|
|
347
304
|
* Handle a channel event from the subscription.
|
|
348
305
|
* @internal
|
|
349
306
|
*/
|
|
350
307
|
private handleChannelEvent;
|
|
351
|
-
/** @internal */
|
|
352
|
-
private _handleObjectCreated;
|
|
353
|
-
/** @internal */
|
|
354
|
-
private _handleObjectUpdated;
|
|
355
|
-
/** @internal */
|
|
356
|
-
private _handleObjectDeleted;
|
|
357
|
-
/** @internal */
|
|
358
|
-
private _handleObjectMoved;
|
|
359
308
|
}
|
|
360
309
|
/**
|
|
361
310
|
* A lightweight handle for a specific conversation within a channel.
|
|
@@ -382,11 +331,6 @@ export declare class ConversationHandle {
|
|
|
382
331
|
setSystemInstruction(instruction: string | null): Promise<void>;
|
|
383
332
|
/** Rename this conversation. */
|
|
384
333
|
rename(name: string): Promise<void>;
|
|
385
|
-
/** Find objects using structured filters and/or natural language. */
|
|
386
|
-
findObjects(options: FindObjectsOptions): Promise<{
|
|
387
|
-
objects: RoolObject[];
|
|
388
|
-
message: string;
|
|
389
|
-
}>;
|
|
390
334
|
/** Create a new object. */
|
|
391
335
|
createObject(collection: string, body: Record<string, unknown>, options?: CreateObjectOptions): Promise<{
|
|
392
336
|
object: RoolObject;
|
|
@@ -410,9 +354,9 @@ export declare class ConversationHandle {
|
|
|
410
354
|
objects: RoolObject[];
|
|
411
355
|
}>;
|
|
412
356
|
/** Create a new collection schema. */
|
|
413
|
-
createCollection(name: string, fields: FieldDef[]): Promise<CollectionDef>;
|
|
357
|
+
createCollection(name: string, fields: FieldDef[] | CollectionDef, options?: CollectionOptions): Promise<CollectionDef>;
|
|
414
358
|
/** Alter an existing collection schema. */
|
|
415
|
-
alterCollection(name: string, fields: FieldDef[]): Promise<CollectionDef>;
|
|
359
|
+
alterCollection(name: string, fields: FieldDef[] | CollectionDef, options?: CollectionOptions): Promise<CollectionDef>;
|
|
416
360
|
/** Drop a collection schema. */
|
|
417
361
|
dropCollection(name: string): Promise<void>;
|
|
418
362
|
setMetadata(key: string, value: unknown): void;
|
package/dist/channel.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../src/channel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../src/channel.ts"],"names":[],"mappings":"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"}
|